我正在编写一个shell脚本,以输出来自源PNG的多种图像大小和格式。该脚本运行良好,并输出正确的大小和格式,但我得到了一个错误,在脚本的结尾,我试图修复。shell脚本代码如下:
convert $pic -verbose -strip \
\( +clone -quality 75 -write test-output-$today-xl.jpg -write test-output-$today-xl.webp +delete \) \
\( +clone -resize 900 -quality 75 -write test-output-$today-lg.jpg -write test-output-$today-lg.webp +delete \) \
\( +clone -resize 747 -quality 75 -write test-output-$today-md.jpg -write test-output-$today-md.webp +delete \) \
\( +clone -resize 598 -quality 75 -write test-output-$today-sm.jpg -write test-output-$today-sm.webp +delete \) \
+clone -resize 548 -quality 75 -write test-output-$today-xs.jpg -write test-output-$today-xs.webp +delete它会生成以下输出:
test-input.png=>test-output-2020-12-16-xl.jpg PNG 1788x1028 1788x1028+0+0 8-bit sRGB 88171B 0.060u 0:00.065
test-input.png=>test-output-2020-12-16-xl.webp PNG 1788x1028 1788x1028+0+0 8-bit sRGB 52228B 0.180u 0:00.179
test-input.png=>test-output-2020-12-16-lg.jpg PNG 1788x1028=>900x517 900x517+0+0 8-bit sRGB 27070B 0.380u 0:00.070
test-input.png=>test-output-2020-12-16-lg.webp PNG 1788x1028=>900x517 900x517+0+0 8-bit sRGB 16648B 0.490u 0:00.070
test-input.png=>test-output-2020-12-16-md.jpg PNG 1788x1028=>747x429 747x429+0+0 8-bit sRGB 19482B 0.310u 0:00.046
test-input.png=>test-output-2020-12-16-md.webp PNG 1788x1028=>747x429 747x429+0+0 8-bit sRGB 11790B 0.350u 0:00.048
test-input.png=>test-output-2020-12-16-sm.jpg PNG 1788x1028=>598x344 598x344+0+0 8-bit sRGB 13190B 0.330u 0:00.044
test-input.png=>test-output-2020-12-16-sm.webp PNG 1788x1028=>598x344 598x344+0+0 8-bit sRGB 8134B 0.230u 0:00.033
test-input.png=>test-output-2020-12-16-xs-0.jpg[0] PNG 1788x1028=>548x315 548x315+0+0 8-bit sRGB 11719B 0.520u 0:00.073
test-input.png=>test-output-2020-12-16-xs-1.jpg[1] PNG 1788x1028=>548x315 548x315+0+0 8-bit sRGB 11719B 0.340u 0:00.047
INFO: Added frame. offset:0,0 dispose:0 blend:1
test-input.png=>test-output-2020-12-16-xs.webp[0] PNG 1788x1028=>548x315 548x315+0+0 8-bit sRGB 13732B 0.520u 0:00.075
convert: `+delete' @ error/convert.c/ConvertImageCommand/3303.你知道为什么我会用+delete命令得到一个错误,并且还会得到最后输出的jpg的两个版本吗?
抱歉,如果这是一个简单的解决方案,我发现imagemagick文档有点难以解析特定的问题。提前感谢!
发布于 2020-12-17 05:12:20
我会像下面这样在Imagemagic中处理它。所有克隆都必须用括号括起来。添加null:不生成其他输出。
convert $pic -verbose -strip \
\( +clone -quality 75 -write test-output-$today-xl.jpg -write test-output-$today-xl.webp +delete \) \
\( +clone -resize 900 -quality 75 -write test-output-$today-lg.jpg -write test-output-$today-lg.webp +delete \) \
\( +clone -resize 747 -quality 75 -write test-output-$today-md.jpg -write test-output-$today-md.webp +delete \) \
\( +clone -resize 598 -quality 75 -write test-output-$today-sm.jpg -write test-output-$today-sm.webp +delete \) \
\( +clone -resize 548 -quality 75 -write test-output-$today-xs.jpg -write test-output-$today-xs.webp +delete \) \
null:发布于 2020-12-17 04:54:09
语法为:
convert <INPUT> <OUTPUT>所以你必须在最后输出一些东西,你不能只删除最后一张图片。
您可以以null:结束,以丢弃最后一个图像,但最好不要在一开始就创建它。所以你最好的选择是:
+delete,只使用您在第一行加载的输入图像,
此外,-quality 75是一个设置,这意味着它将保持设置,直到您更改它,因此您可以只将它放在第一行,而不是到处重复它。
此外,您还应该使用双引号将bash变量括起来:
convert "$pic" ...那么,当你的文件名中有空格的时候,它们仍然可以工作。
https://stackoverflow.com/questions/65330207
复制相似问题