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

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

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

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

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

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

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

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

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

要获得缩放图像所需的比率,请参阅下面的代码。 请记住,这拉伸图像,就像在Photoshop中一样。 你基本上是图像尺寸的四倍,所以它会拉伸并可能产生伪影。

伪代码

 ratio = 300.0 / 72.0 // 4.167 image.width * ratio image.height * ratio 

DPI不应存储在位图图像文件中,因为位图的大多数数据源使其无意义。

位图图像存储为像素。 像素在任何方面都没有固有的尺寸。 只有在渲染时 – 无论是监视器,打印机还是自动交叉缝纫机 – DPI都很重要。

以100 dpi打印的800×1000像素位图图像变成漂亮的8×10“照片。以200 dpi打印, EXACT SAME位图图像变成4×5”照片。

用数码相机拍摄图像,DPI是什么意思? 当然不是聚焦在CCD成像器上的区域的大小 – 这取决于距离,并且NASA返回10万光年的星系图像,相隔200万光年,在同一视野中,是什么样的你能从这些信息中获得DPI吗?

不要成为位图图像DPI概念的牺牲品 – 这是一个错误。 位图图像没有物理尺寸(除了RAM或硬盘中几微米的存储空间)。 它只是显示的图像或打印的图像,其物理尺寸以英寸,毫米或弗隆为单位。

此代码使用merge和convert 200 dbi

  static void Main(string[] args) { Path string Outputpath = @"C:\Users\MDASARATHAN\Desktop\TX_HARDIN_10-01-2016_K"; string[] TotalFiles = Directory.GetFiles(Outputpath, "*.tif", SearchOption.AllDirectories); foreach (string filename in TotalFiles) { Bitmap bitmap = (Bitmap)Image.FromFile(filename); string ExportFilename = string.Empty; int Pagecount = 0; bool bFirstImage = true; bitmap.SetResolution(200, 200); ExportFilename = Path.GetDirectoryName(filename) + "\\" + Path.GetFileName(filename)+"f"; MemoryStream byteStream = new MemoryStream(); Pagecount = bitmap.GetFrameCount(FrameDimension.Page); if (bFirstImage) { bitmap.Save(byteStream, ImageFormat.Tiff); bFirstImage = false; } Image tiff = Image.FromStream(byteStream); ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff"); EncoderParameters encoderParams = new EncoderParameters(2); EncoderParameter parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4); encoderParams.Param[0] = parameter; parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); encoderParams.Param[1] = parameter; // bitmap.Dispose(); try { tiff.Save(ExportFilename, encoderInfo, encoderParams); } catch (Exception ex) { } EncoderParameters EncoderParams = new EncoderParameters(2); EncoderParameter SaveEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); EncoderParameter CompressionEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4); EncoderParams.Param[0] = CompressionEncodeParam; EncoderParams.Param[1] = SaveEncodeParam; if (bFirstImage == false) { for (int i = 1; i < Pagecount; i++) { //bitmap = (Bitmap)Image.FromFile(filenames); byteStream = new MemoryStream(); bitmap.SelectActiveFrame(FrameDimension.Page, i); bitmap.Save(byteStream, ImageFormat.Tiff); bitmap.SetResolution(200, 200); tiff.SaveAdd(bitmap, EncoderParams); } } SaveEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush); EncoderParams = new EncoderParameters(1); EncoderParams.Param[0] = SaveEncodeParam; tiff.SaveAdd(EncoderParams); tiff.Dispose(); bitmap.Dispose(); File.Delete(filename); } }