如何在不更改宽度和高度的情况下将图像文件调整为询问文件大小?

时间:2013-03-17 13:20:34

标签: c# .net

如何将图像文件大小更改为所需大小?就像800KB到100KB的图像一样?

我有一个3MB尺寸的图像:(2560 X 1600),300 dpi,位深度为24.我只是在Bitmap中读取它,将其分辨率更改为150 dpi并保存新名称,并认为可能会将其降低到几乎原始的一半,但新文件保持相同的大小和dpi SetResolution不会产生任何影响。

Bitmap image = Bitmap.FromFile("myPic.jpeg");
image.SetResolution(96, 96);
image.Save("newPic.jpeg");

然后我使用了这段代码

// Reads Image
Bitmap image = Bitmap.FromFile("myPic.jpeg");

// Sets canvas with new dpi but same dimensions and color depth
Bitmap canvas = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb);
canvas.SetResolution(150, 150);

// Draw image on canvas through graphics
Graphics graphics = Graphics.FromImage(canvas);
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height),
            new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);

// Saved Image
bitmap.Save("newPic.jpeg");

此处dpi已更改为新文件,但文件大小跳至7.84MB

错在哪里? dpi对文件大小有影响吗?

感谢您的考虑。 保持祝福

1 个答案:

答案 0 :(得分:2)

分辨率(ppi / dpi)对文件大小没有影响。它只是关于图像在物理尺寸上应该有多大的信息,即如何将像素大小转换为英寸。

使用不同的分辨率重新保存图像时,除了这两个值之外,文件将完全相同。

当您创建新的位图并将图像绘制到该位图上时,新的位图对象没有与之关联的文件类型,因此当您保存它而不指定文件类型时,它将保存为PNG图像而不是JPEG。

如何在不更改像素尺寸的情况下更改文件大小,可以更改JPEG文件的压缩级别。

MSDN: How to: Set JPEG Compression Level