首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ImageMagick优化平铺花边尺寸

用ImageMagick优化平铺花边尺寸
EN

Stack Overflow用户
提问于 2018-03-29 17:35:03
回答 2查看 1.3K关注 0票数 1

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

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

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

有关信息,我使用这个命令来生成TIFF。

代码语言:javascript
复制
convert <jpeg file> -quality 45 -depth 8 +profile '*' -define tiff:tile-geometry=256x256 -compress jpeg 'ptif:<tiff file>'

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-03-30 21:12:23

我想我应该在@mark-setchell的优秀答案中加上一个注释,但它的发表时间太长了,所以我另做了一个,对不起。

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

代码语言:javascript
复制
$ 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

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

代码语言:javascript
复制
$ tiffinfo x-convert.tif | grep -i interp
  Photometric Interpretation: RGB color

也许有什么方法可以让它转而使用YCbCr呢?不幸的是,我不知道该怎么做。

我会用利维普斯代替。它的速度快了10倍以上(至少在这台笔记本电脑上),占用的内存要少得多,并且它正确地启用了YCbCr模式,因此您可以得到更小的文件:

代码语言:javascript
复制
$ 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调低了,你可以把它的尺寸降低得更多:

代码语言:javascript
复制
$ 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。

票数 2
EN

Stack Overflow用户

发布于 2018-03-30 12:49:35

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

"PalaisDuLouvre.tif“图像是2MB作为一个平铺的TIF:

代码语言:javascript
复制
ls -lhr PalaisDuLouvre.tif 
-rw-r--r--@ 1 mark  staff   1.9M 30 Mar 11:24 PalaisDuLouvre.tif

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

代码语言:javascript
复制
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%)存储如下:

代码语言:javascript
复制
convert PalaisDuLouvre.tif[0] -quality 90 fullsize.jpg

尺寸为554:

代码语言:javascript
复制
-rw-r--r--   1 mark  staff   554K 30 Mar 13:44 fullsize.jpg

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

代码语言:javascript
复制
convert fullsize.jpg -define tiff:tile-geometry=256x256 -compress jpeg ptif:tiled.tif

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

代码语言:javascript
复制
vips tiffsave fullsize.jpg vips.tif --compression=jpeg --Q=45 --tile --tile-width=256 --tile-height=256 --pyramid
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49562092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档