C#为什么调整图像大小会增加文件大小

6
我有一个大小为6k的jpg图像文件,宽度为172像素,高度为172像素。
我使用以下代码尝试将其调整为128 * 128像素的jpg文件:
public static Image ResizeImage(Image img, int width, int height)
    {
        var b = new Bitmap(width, height, PixelFormat.Format24bppRgb);

        using (Graphics g = Graphics.FromImage(b))
        {
            g.DrawImage(img, 0, 0, width, height);
        }

        return b;
    }

这段代码不知何故将文件大小增加到了50k,有人能解释一下原因吗?如何将图像调整为128*128px并保持大小约为6k。
非常感谢。
DY

如果省略 g.SmoothingMode = SmoothingMode.AntiAlias,则文件大小是多少? - stuartd
抱歉,Stuart,你是什么意思? - Daoming Yang
4
@DotNet用户,你为什么要编辑掉g.SmoothingMode = SmoothingMode.AntiAlias这一行代码,并向@Stuart询问他的意思?他的问题似乎已经很清楚了。 - jball
如果你需要调整图像大小(尤其是缩小),最好将Graphics.InterpolationMode设置为HighQualityBilinear,如果是放大,则应该设置为HighQualityBicubic。否则,结果看起来会很丑陋。 - Aaronaught
抱歉,这是一个误解。 - Daoming Yang
1
在文本编辑器中打开你调整大小后的“JPG”图像。我敢打赌,文本将以“BM”开头,这意味着你的图像是BMP格式(而不是JPEG格式,但是Windows和一些浏览器将从其内容检测图像类型并正确地呈现它)。 - mykhal
2个回答

11

压缩JPEG文件所使用的算法决定了它的质量损失程度。某些算法会丢失更多图像质量,但可以获得更小的文件大小。

代码中将JPEG文件扩展为位图,并在内存中处理。当保存128x128的JPEG文件时,代码使用的压缩算法比保存原始图片时使用的算法要少,这导致生成的JPEG文件更大,尽管图像大小本身更小。


嗨,Santosc,非常感谢。我已经花了一个晚上在这个上面。可以提供一个设置的示例吗? - Daoming Yang
你能展示一下用来将文件保存为jpeg格式的代码吗? - santosc
4
这是一篇介绍如何以编程方式设置JPEG压缩级别的文章:http://msdn.microsoft.com/zh-cn/library/bb882583.aspx。 - David

6
在发布的代码中,您并没有返回JPEG文件,而是位图(128x128 24bpp未压缩位图大小为48kB)。您需要再次进行压缩,这个教程可能有所帮助。请参考此教程

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接