C# 保存的jpeg失真??

WM_JAWIN 2014-04-10 02:41:30
Image 对像保存为jpg时,怎么把质量调到最高?,参看了网上说的100L也是没效果,100L也多也就是等于80品质,达不到真正的100
测试了几条线,几个字,除了黑色,其它几种色,几乎都是有毛边,且颜色不正.偏暗

这个是我的代码:

public class Imagetest : IHttpHandler
{
HttpRequest Request { get; set; }
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
Request = context.Request;
using (var img = new Bitmap(256, 256))
{
PrintLogo(img);
//var ics = GetEncoderInfo("image/png");
var ics = GetEncoderInfo("image/jpeg");
var ptrs = new EncoderParameters();
ptrs.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
img.Save(context.Response.OutputStream, ics, ptrs);
}
}

void PrintLogo(System.Drawing.Image src)
{
using (var g = Graphics.FromImage(src))
{
g.Clear(Color.White);
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;

g.DrawLine(Pens.Red, new Point(0, 0), new Point(256, 256));
g.DrawLine(Pens.Green, new Point(64, 0), new Point(256, 256));
g.DrawLine(Pens.Blue, new Point(0, 64), new Point(256, 256));
g.DrawLine(Pens.Black, new Point(0, 128), new Point(256, 256));
g.DrawLine(Pens.Yellow, new Point(128, 0), new Point(256, 256));
g.DrawString("Png效果", new Font("新宋体", 12), Brushes.Red, new Point(192, 8));
g.DrawString("Png效果", new Font("新宋体", 12), Brushes.Green, new Point(192, 32));
g.DrawString("Png效果", new Font("新宋体", 12), Brushes.Blue, new Point(192, 56));
g.DrawString("Png效果", new Font("新宋体", 12), Brushes.Black, new Point(192, 80));
}
}

public bool IsReusable { get { return false; } }

private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
}


以下三张是效果对比



...全文
600 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
宝_爸 2014-04-11
  • 打赏
  • 举报
回复
DPI默认好像是96 设置能300试一试 img.SetResolution(300, 300);
宝_爸 2014-04-11
  • 打赏
  • 举报
回复
我觉得PNG效果一样啊。
showjim 2014-04-10
  • 打赏
  • 举报
回复
既然要无损,可以bmp+压缩
tcmakebest 2014-04-10
  • 打赏
  • 举报
回复
没必要死盯着JPG吧
laviewpbt 2014-04-10
  • 打赏
  • 举报
回复
这个东西不是代码的错,是GDI+内部编码器就是这样的。你只能找其他的图像库替代这个函数。
liuxingfffff 2014-04-10
  • 打赏
  • 举报
回复
LZ帮你找了个帖子 希望对你有帮助 http://bbs.csdn.net/topics/310084834
特别安静 2014-04-10
  • 打赏
  • 举报
回复
好多分啊,友情帮顶
WM_JAWIN 2014-04-10
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
jpeg必然有色彩和像素的失真。
失真是必然的,但也不要这么离步吧.用第三方软件处的过的jpg,也做对比了.你看第一张(C#直接生成),和第三张(Firewors转换处理)的,差别,也太明显了
liuxingfffff 2014-04-10
  • 打赏
  • 举报
回复
firework 软件 把一个png图片转换成jpg图片 不失真的情况下 图片大了10倍。 这东西可能涉及算法。 能力有限 解决不了。
threenewbee 2014-04-10
  • 打赏
  • 举报
回复
jpeg必然有色彩和像素的失真。
WM_JAWIN 2014-04-10
  • 打赏
  • 举报
回复
引用 2 楼 liuxingfffff 的回复:
你试着把你的png图片保存到本地。 然后用画图 或者ps打开。 另存为jpg的图片。 再和你的图片对比下。
第三张图,就是用画图软件,把PNG转换成Jpg的,质量先的是100,在我的显示器上看,跟PNG没有差别
liuxingfffff 2014-04-10
  • 打赏
  • 举报
回复
你试着把你的png图片保存到本地。 然后用画图 或者ps打开。 另存为jpg的图片。 再和你的图片对比下。
WM_JAWIN 2014-04-10
  • 打赏
  • 举报
回复
怎么样才可以让他保存的jpg图像,达到真正100的最高的品质?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧