首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Imagemagick转换为多种尺寸时返回错误

Imagemagick转换为多种尺寸时返回错误
EN

Stack Overflow用户
提问于 2020-12-17 03:49:33
回答 2查看 41关注 0票数 0

我正在编写一个shell脚本,以输出来自源PNG的多种图像大小和格式。该脚本运行良好,并输出正确的大小和格式,但我得到了一个错误,在脚本的结尾,我试图修复。shell脚本代码如下:

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

它会生成以下输出:

代码语言:javascript
复制
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文档有点难以解析特定的问题。提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2020-12-17 05:12:20

我会像下面这样在Imagemagic中处理它。所有克隆都必须用括号括起来。添加null:不生成其他输出。

代码语言:javascript
复制
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:
票数 1
EN

Stack Overflow用户

发布于 2020-12-17 04:54:09

语法为:

代码语言:javascript
复制
convert <INPUT> <OUTPUT>

所以你必须在最后输出一些东西,你不能只删除最后一张图片。

您可以以null:结束,以丢弃最后一个图像,但最好不要在一开始就创建它。所以你最好的选择是:

  • 删除最后一个+delete

,只使用您在第一行加载的输入图像,

  • 删除最后一个use

此外,-quality 75是一个设置,这意味着它将保持设置,直到您更改它,因此您可以只将它放在第一行,而不是到处重复它。

此外,您还应该使用双引号将bash变量括起来:

代码语言:javascript
复制
convert "$pic" ...

那么,当你的文件名中有空格的时候,它们仍然可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65330207

复制
相关文章

相似问题

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