【问题标题】:Optmize size of tiled tiff with ImageMagick使用 ImageMagick 优化平铺 tiff 的大小
【发布时间】:2018-03-29 17:35:03
【问题描述】:

我实际上是使用 ImageMagick 从 jpeg 文件创建 Tiled TIFF。我的目标是使用 IIPImage 服务器。 我可以轻松生成文件,但我的问题是我必须处理大量图像仓库,优化 TIFF 文件占用的空间至关重要。

因此,通过使用 45% 的压缩(以及 256x256 的图块),我获得了可接受的质量,这是我所知道的最高优化级别。 使用该配置,我的 TIFF 文件的大小与原始 jpeg 文件的大小相同。 例如,如果 jpeg 的权重为 10Mo,则结果 TIFF 的权重为 11.4Mo。这很好但还不够,因为如果我的初始仓库重量为 2To,我必须为我的项目计划至少 4To。

因此,我想知道是否存在一种方法可以进一步优化我的 TIFF 文件的大小而不会损失超过 45% 的质量...通过使用 ImageMagick 或其他工具。

有关信息,我正在使用此命令生成 TIFF。

convert <jpeg file> -quality 45 -depth 8 +profile '*' -define tiff:tile-geometry=256x256 -compress jpeg 'ptif:<tiff file>'

谢谢!

【问题讨论】:

  • 存储越来越便宜 - 三思而后行放弃你永远无法恢复的质量......
  • 你好,马克。谢谢你的回复。您使用哪个命令来操作 PalaisDuLouvre.tif" ?

标签: image imagemagick jpeg tiff iipimage


【解决方案1】:

我以为我只是在 @mark-setchell 的出色答案中添加一个注释,但它出现的时间太长,所以我单独制作了一个,抱歉。

您的问题是 imagemagick(至少在当前的 Ubuntu 上)将金字塔形 JPEG TIFF 保存为 RGB 而不是 YCbCr,因此它们是 巨大的。例如,wtc.jpg 是使用默认 Q75 保存的 10,000 x 10,000 像素的 JPEG 图像:

$ time convert wtc.jpg -quality 45 -depth 8 +profile '*' -define tiff:tile-geometry=256x256 -compress jpeg 'ptif:x-convert.tif'
real    0m27.553s
user    1m10.903s
sys 0m1.129s
$ ls -l wtc.jpg x-convert.tif 
-rw-r--r-- 1 john john 15150881 Mar 16 08:55 wtc.jpg
-rw-r--r-- 1 john john 37346722 Mar 30 20:17 x-convert.tif

你可以看到这样的压缩类型:

$ tiffinfo x-convert.tif | grep -i interp
  Photometric Interpretation: RGB color

也许有一些方法可以让它改用 YCbCr?不幸的是,我不确定如何。

我会改用libvips。它的速度提高了 10 倍以上(无论如何在这台笔记本电脑上),使用更少的内存,并且可以正确启用 YCbCr 模式,因此您可以获得更小的文件:

$ time vips tiffsave wtc.jpg x-vips.tif --compression=jpeg --tile --tile-width=256 --tile-height=256 --pyramid
real    0m2.180s
user    0m2.595s
sys 0m0.082s
$ ls -l x-vips.tif 
-rw-r--r-- 1 john john 21188074 Mar 30 20:27 x-vips.tif
$ tiffinfo x-vips.tif | grep -i interp
  Photometric Interpretation: YCbCr

如果您将 Q 设置得较低,则可以进一步减小尺寸:

$ vips tiffsave wtc.jpg x-vips.tif --compression=jpeg --tile --tile-width=256 --tile-height=256 --pyramid --Q 45
$ ls -l x-vips.tif 
-rw-r--r-- 1 john john 12664900 Mar 30 22:01 x-vips.tif

虽然我自己会坚持使用默认的 Q75。

【讨论】:

  • 您好,感谢您提供这些信息。我使用 Vips 而不是 ImageMagick 获得了非常好的结果。最终 TIFF 的大小几乎被四除。但是,现在我在 IIPImage 上遇到了损坏问题。我在 Vips Github 上创建了另一个线程。您可以在此处关注讨论:github.com/jcupitt/libvips/issues/925
  • 您在旧版本的 iipimage 中发现了一个错误。使用当前稳定的 iipimage,它应该可以工作。
【解决方案2】:

我对 IIPImage 服务器不熟悉,所以我的想法可能不恰当。如果您存储平铺的 TIFF,您将存储多个分辨率,并且除了最高分辨率之外的所有分辨率都是多余的 - 那么您是否可以只存储最高分辨率并按需生成较低的分辨率?

“PalaisDuLouvre.tif”图像大小为 2MB,以平铺 TIF 形式显示:

ls -lhr PalaisDuLouvre.tif 
-rw-r--r--@ 1 mark  staff   1.9M 30 Mar 11:24 PalaisDuLouvre.tif

它包含 6 种不同分辨率的相同图像:

identify PalaisDuLouvre.tif
PalaisDuLouvre.tif[0] TIFF 4000x828 4000x828+0+0 8-bit sRGB 1.88014MiB 0.000u 0:00.000
PalaisDuLouvre.tif[1] TIFF 2000x414 2000x414+0+0 8-bit sRGB 1.88014MiB 0.000u 0:00.000
PalaisDuLouvre.tif[2] TIFF 1000x207 1000x207+0+0 8-bit sRGB 1.88014MiB 0.000u 0:00.000
PalaisDuLouvre.tif[3] TIFF 500x103 500x103+0+0 8-bit sRGB 1.88014MiB 0.000u 0:00.000
PalaisDuLouvre.tif[4] TIFF 250x51 250x51+0+0 8-bit sRGB 1.88014MiB 0.000u 0:00.000
PalaisDuLouvre.tif[5] TIFF 125x25 125x25+0+0 8-bit sRGB 1.88014MiB 0.000u 0:00.000

然而,我可以像这样以比平铺 TIFF 更好的质量 (90%) 存储它:

convert PalaisDuLouvre.tif[0] -quality 90 fullsize.jpg

大小为 554kB:

-rw-r--r--   1 mark  staff   554K 30 Mar 13:44 fullsize.jpg

并在 1 秒内按需生成与您相​​同的平铺 TIF:

convert fullsize.jpg -define tiff:tile-geometry=256x256 -compress jpeg ptif:tiled.tif

或者,您可以使用vips 使您的 TIFF 金字塔更快。以下在我的 iMac 上需要 0.2 秒,即比 ImageMagick 快近 5 倍:

vips tiffsave fullsize.jpg vips.tif --compression=jpeg --Q=45 --tile --tile-width=256 --tile-height=256 --pyramid

【讨论】:

  • 您好,感谢您提供这些信息。我使用 Vips 而不是 ImageMagick 获得了非常好的结果。最终 TIFF 的大小几乎被四除。但是,现在我在 IIPImage 上遇到了损坏问题。我在 Vips Github 上创建了另一个线程。您可以在此处关注讨论:github.com/jcupitt/libvips/issues/925.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 2015-10-28
  • 1970-01-01
  • 2018-04-10
相关资源
最近更新 更多