帮助使用 JPEG 压缩更改 TIFF 文件中的 DPI

Posted

技术标签:

【中文标题】帮助使用 JPEG 压缩更改 TIFF 文件中的 DPI【英文标题】:Help changing DPI in a TIFF file with JPEG compression 【发布时间】:2011-03-01 15:34:49 【问题描述】:

我有一个来自扫描仪的 Tiff 文件。它的分辨率为 300 dpi。但稍后我需要将其更改为不同的值,例如 100

在不丢失初始压缩和颜色深度的情况下,最好的方法是什么?

我已经尝试用Bitmap.FromFile()打开Tiff,但我得到了OutOfMemoryException,也使用了FreeImage库,但是在这里,如果Tiff是灰度的,它总是使用 LZW 压缩而不是 JPEG。我知道 LZW 更好,但 JPEG 对我来说是必须的。

【问题讨论】:

几点:首先,dpi(每英寸点数)与输出有关,而不是像素(并且经常被这样滥用)。严格处理图像时您想要的术语是ppi(每英寸像素数)。其次,根据定义,JPEG 是有损的,而 LZW 不是。 (虽然有lossless JPEG standard。)第三,改变图像中的像素数被称为resampling,当减少图像的ppi时,你总是会丢失细节。 To load .tiff file in C#的可能重复 如果你想保持压缩,你不能用 Bitmap.FromFile() 解码像素。没有办法在不损失质量的情况下将其恢复为 JPEG 格式。 你能发布一个示例图片的链接吗? 【参考方案1】:

当您更改分辨率时,您是否希望图像的尺寸仍以英寸为单位?或者当您达到 100 时,您是否期望 300 像素现在跨越 3 英寸。

如果您希望它具有相同的大小,则必须将图像重新采样为更少的像素 (1/3)。在这种情况下,您必须解码图像,重新采样,然后重新编码。您肯定会在重新采样中丢失信息,然后使用 TIFF 支持的有损 JPEG 压缩会丢失更多信息。

如果您的意思是让图像现在看起来大 3 倍,那么您可以通过仅编辑 TIFF 的元数据来做到这一点。无需触摸实际像素数据即可更改分辨率。 libtiff 可以做到这一点——我不知道 LibTiff.NET 是否可以,但可能。

如果您正在寻找商业解决方案,我公司的DotImage Document Imaging 也可以这样做。

【讨论】:

【参考方案2】:

OutOfMemoryException 是因为 .NET 不支持带有 JPEG 压缩的 TIFF。请参阅this answer 了解更多信息。

【讨论】:

以上是关于帮助使用 JPEG 压缩更改 TIFF 文件中的 DPI的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Sip更改TIFF图像的压缩样式?

PNG、JPEG、BMP等几种图片格式详解(一)—— PNG

使用 C# 更改文件扩展名

在python中将tiff转换为jpeg

TIFF图像文件格式详解

RAW,YUV,RGB,JPEG这几个有啥关系