我正在运行
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
我也在运行ImageMagick 6.9。
我想将PDF图像转换为WebP。AFAIK,开箱即用,Linux上的ImageMagick无法转换为WebP,所以我sudo apt-get install webp
安装cwebp
。
cwebp
允许指定-q
参数,ImageMagick允许指定-quality
参数。
当我运行$ cwebp -q 90 image.png -o image.webp
时,转换它大约需要 8 秒cwebp
。如果我运行convert image.png -quality 90 image.webp
,ImageMagick 大约需要 30 秒来转换它。似乎-quality
参数没有传递给cwebp
.也可能是convert
尝试运行无损转换的情况,这在cwebp
是通过显式-lossless
标志实现的。
我为 10 MB 的测试 png 图像运行测试命令。
我想用convert
命令实现 8 秒的转换时间。我该怎么做?
我知道你想要imagemagick,但是如果你能够考虑替代方案,libvips可以在命令行上快速执行pdf -> webp,而无需任何配置。
例如,在我的2015年笔记本电脑上使用此PDF(奥迪R8手册(,我看到:
$ time convert -density 600 r8.pdf[3] -quality 90 x.webp
real 0m36.699s
user 0m23.787s
sys 0m1.628s
$ vipsheader x.webp
x.webp: 9921x4961 uchar, 3 bands, srgb, webpload
我认为这与你所看到的时代大致一致。
使用libvips,我看到:
$ time vips copy r8.pdf[dpi=600,page=3] x.webp[Q=90]
real 0m7.195s
user 0m6.861s
sys 0m0.505s
$ vipsheader x.webp
x.webp: 9921x4961 uchar, 3 bands, srgb, webpload
相同的结果,但在您的 8 秒时间预算内。
如果您想更好地控制压缩,您可以设置许多其他 webp 选项。
事实证明,委托是使用/etc/ImageMagick-6/delegates.xml
中的规则调用的。
它列出了一堆有关如何在不同类型的图像之间进行转换的规则。
对于我的情况,png
->webp
转换,我需要字符串:<delegate decode="png" encode="webp" command=""cwebp" -quiet %Q "%i" -o "%o""/>
在这个文件中,我不知道-quaility
参数值,似乎没有办法捕获它。
但是,如果您希望保留-q
参数的值以进行cwebp
,则可以选择将-q $YOUR_VALUE
硬编码到delegate
标记内的command
中。
此解决方案仍然比直接调用cwebp
慢,因为 ImageMagick 在调用委托之前最多可能需要 8 秒。