TIFF图生成和压缩:R与GIMP对比IrfanView与Photoshop文件大小

ECI*_*CII 7 tiff r imagemagick gimp image-compression

例如,我生成了一些高分辨率的出版质量图

library(plot3D)
Volcano<-volcano
zf=10 #zoom factor
tiff("Volcano.tif", width=1800*zf, height=900*zf, res=175*zf, compression="lzw")
image2D(z = Volcano, clab = "height, m",colkey = list(dist = -0.20, shift = 0.15,side = 3, length = 0.5, width = 0.5,cex.clab = 1.2, col.clab = "white", line.clab = 2,col.axis = "white", col.ticks = "white", cex.axis = 0.8))
dev.off()
Run Code Online (Sandbox Code Playgroud)

该文件是22 MB.

现在我用GIMP打开文件而不做任何其他事情我将它导出为"Volcano gimp.tif"(不要改变分辨率,或做任何其他事情).GIMP生成一个1.9 MB的文件("Volcano gimp.tif").

imagemagick 报告相似图片统计:

$ identify Volcano.tif
Volcano.tif TIFF 18000x9000 18000x9000+0+0 8-bit DirectClass 22.37MB 0.000u 0:00.000
$ identify "Volcano gimp.tif"
Volcano gimp.tif TIFF 18000x9000 18000x9000+0+0 8-bit DirectClass 1.89MB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)

即使使用identify -verbose2个文件看起来也很相似.

这些文件有什么区别?为什么他们有这么不同的文件大小?

更新:好的,事情越来越疯了.我用IrfanView做了同样的事情,我得到了不同的文件大小.初始文件是Volcano.tifRwith 生成的compression="lzw".检查尺寸的大小Volcano irfan.tifVolcano gimp.tif差异,但所有其他统计数据都是相同的.内存占用,DPI,颜色,分辨率相同.磁盘大小不同.

在此输入图像描述

更新2: Adobe Photoshop将文件保存为2.6 MB

在此输入图像描述

WinRar报告原始R生成的TIFF是高度可压缩的(从22MB - > 3.6MB)

更新3:此问题可能类似于2 col x 1行磁贴中的蒙太奇/加入2 TIFF图像而不会丢失质量

更新4: R生成的TIFF文件可以在这里找到http://ge.tt/7ZvRd4C1/v/0?c

Bit*_*ank 9

显然,R使用的TIFF LZW压缩器没有使用一个重要的选项(TIFF预测器),这导致了一个非常大的文件.当数据压缩能够识别数据中的对称性/冗余时,数据压缩效果最佳.在这种情况下,图像数据由包含红色,绿色和蓝色8位值的24位(3字节)像素组成.标准LZW压缩查看重复模式的字节流.如果它将彩色图像简单地看作字节流,它将看到重复的3字节模式而不是重复恒定颜色的模式.在数据上启用TIFF预测器会导致差分滤波器存储每个像素与其邻居的增量.如果相邻像素是相同的颜色,它将存储0.一长串0的压缩比重复至少3个字节长的非零的模式要好得多.

以下是它如何在6像素线上工作的示例.编码时,预测器从右边缘开始,并为每条扫描线左侧工作:

Original data:
2A 50 40 2A 50 40 2A 50 40 2A 50 40 2A 50 40 2A 50 40 (6 pixels of the same color)

After horizontal differencing (TIFF predictor):
2A 50 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

The data is much more compressible after the predictor since long runs of the same value (0x00) are easier for LZW to compress.
Run Code Online (Sandbox Code Playgroud)

结论:这应该作为针对R压缩代码所有者的错误提交,因为在全彩色图像上使用LZW而没有预测器会产生不良结果.与此同时,需要一种解决方法来更有效地压缩它.

  • PNG应该为您提供最小的文件,因为它利用了水平和垂直对称性.未压缩的TIFF会占用大量的磁盘空间,因此即使压缩不良的TIFF也是更好的选择.最终文件格式的选择取决于打开它们的软件.他们都使用无损压缩,因此保留了原始数据. (2认同)
  • PNG和TIFF LZW是无损的(有或没有预测器).您计划使用的所有文件转换将产生相同的输出,因此唯一的区别是文件大小. (2认同)