如何更改图像的分辨率(DPI)?

uld*_*114 25 .net c# image dpi

我有一张DPI为72的JPEG图片.我想将72 dpi更改为300 dpi.

如何使用C#更改JPEG图片的分辨率?

Sim*_*ier 58

您必须使用目标分辨率将位复制到新图像上,如下所示:

    using (Bitmap bitmap = (Bitmap)Image.FromFile("file.jpg"))
    {
        using (Bitmap newBitmap = new Bitmap(bitmap))
        {
            newBitmap.SetResolution(300, 300);
            newBitmap.Save("file300.jpg", ImageFormat.Jpeg);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 有没有理由你必须*复制*位图,而不是只在原件上调用`SetResolution`? (14认同)

小智 9

本文讨论修改EXIF数据而不重新保存/重新压缩(因而丢失信息 - 它实际上使用了"技巧";该方法可能需要更多直接库)SetResolution.这是在快速谷歌搜索中找到的,但我想指出,您需要做的就是修改存储的EXIF数据.

另外:用于EXIF修改的.NET lib和另一个SO问题.当您知道好的搜索字词时,Google就拥有了.


Sov*_*iut 5

只需按正确的比例缩放图像的宽度和高度即可。并非所有图像格式都支持DPI元标记,当它们支持时,它们告诉图形软件要做的就是将图像除以提供的比率。

例如,如果将300dpi的图像从Photoshop导出为JPEG,则在图片查看软件中查看时,图像将显得非常大。这是因为JPEG不支持DPI信息,并且在保存时将其丢弃。这意味着您的图片查看器不知道将图像除以什么比例,而是以1:1的比例显示图像。

要获得比例,您需要按比例缩放图像,请参见下面的代码。请记住,这拉伸图像,就像在Photoshop中一样。您实际上是将图像的大小增加了三倍,因此图像将被拉伸并可能产生伪像。

伪代码

ratio = 300.0 / 72.0   // 4.167
image.width * ratio
image.height * ratio
Run Code Online (Sandbox Code Playgroud)