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

问题描述 投票:0回答:6

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

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

c# .net image dpi
6个回答
78
投票

您必须将这些位复制到具有目标分辨率的新图像上,如下所示:

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

9
投票

本文讨论修改EXIF数据,而无需重新保存/重新压缩(从而丢失信息——它实际上使用了一个“技巧”;可能有更直接的库),这是

SetResolution所需的
方法。这是通过谷歌快速搜索找到的,但我想指出,您需要做的就是修改存储的 EXIF 数据。

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


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

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

要获取缩放图像所需的比例,请参阅下面的代码。 请记住,这

将会拉伸图像,就像在 Photoshop 中一样。您实际上将图像的大小扩大了四倍,因此它会拉伸并可能产生伪影。

伪代码

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

0
投票
Bitmap 类不能在 Mac 上使用,这就是为什么它不是它的确切解决方案。您可以使用 Sixlabors.imagesharp,但它不能免费用于商业用途。您可以使用skisharp,但是当您打开检查器时,您会在 dpi 部分看到仍然是 72。

更改图像的 dpi 使用 MagickImage 而不是全部。

dotnet add package Magick.NET-Q8-AnyCPU
并应用这个 -->

// You can work with filePath, stream etc. also using var image = new MagickImage(bytesOfImage); double targetDPI = 300; image.Density = new Density(targetDPI, targetDPI); var outputStream = new MemoryStream(); // Save the output image image.Write(outputStream); // Return the byte array of the resized image return outputStream.ToArray();
    

-1
投票
此代码使用合并和转换 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); } }
    

-2
投票
DPI 不应存储在位图图像文件中,因为大多数位图数据源都使其毫无意义。

位图图像存储为像素。 像素在任何方面都没有固有的大小。 只有在渲染时 - 无论是显示器、打印机还是自动十字绣机 - DPI 才重要。

以 100 dpi 打印的 800x1000 像素位图图像会变成漂亮的 8x10" 照片。以 200 dpi 打印,

完全相同 位图图像会变成 4x5" 照片。

用数码相机拍摄图像,DPI 是什么意思? 当然不是 CCD 成像仪聚焦的区域大小 - 这取决于距离,并且 NASA 返回的星系图像直径为 100,000 光年,相距 200 万光年,在相同的视场中,什么样的星系您从

THAT 信息中获得 DPI 的值吗?

不要成为位图图像 DPI 想法的受害者 - 这是一个错误。 位图图像没有物理尺寸(除了 RAM 或硬盘驱动器中几微米的存储空间)。 它只是显示的图像或打印的图像,其物理尺寸以英寸、毫米或弗隆为单位。

© www.soinside.com 2019 - 2024. All rights reserved.