没有中间文件的ImageMagick命令失败
我正在研究ImageMagick中的一个例子,叫做“凝胶”效应 我不想用中间图像分多个步骤执行ImageMagick脚本,而是希望在没有中间文件的情况下一步执行 我的代码如下所示(95%与示例相同): 这些步骤是示例中步骤的副本 问题是最后一个克隆步骤:没有中间文件的ImageMagick命令失败,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我正在研究ImageMagick中的一个例子,叫做“凝胶”效应 我不想用中间图像分多个步骤执行ImageMagick脚本,而是希望在没有中间文件的情况下一步执行 我的代码如下所示(95%与示例相同): 这些步骤是示例中步骤的副本 问题是最后一个克隆步骤: ( +clone -background navy -shadow 80x4+4+4 ) +swap -background none -flatten 使原本非常好的图像变暗。即不添加dropshadow。在这一步之前,one命令工作得
( +clone -background navy -shadow 80x4+4+4 ) +swap -background none -flatten
使原本非常好的图像变暗。即不添加dropshadow。在这一步之前,one命令工作得非常好
而且。如果在最后一步之前保存图像,如下所示:
convert.exe -size 150x64 xc:none -fill green
-draw "roundrectangle 10,10 140,54 8,8"
( +clone -alpha extract -blur 0x12 -shade 110x0
-normalize -sigmoidal-contrast 16,60% -evaluate multiply .5
-roll +4+8 +clone -compose Screen -composite ) -compose In -composite
( +clone -alpha extract -blur 0x2 -shade 0x90 -normalize -blur 0x2
+level 60,100% -alpha On ) -compose Multiply -composite
-font Verdana-Bold -pointsize 20 -fill white -stroke black -gravity Center
-annotate 0 "Download" -trim -repage 0x0+7+7
tempbutton.png
convert.exe tempbutton.png
( +clone -background navy -shadow 80x4+4+4 ) +swap -background none -flatten
downloadbutton.png
然后在tempbutton上执行最后一次克隆,如下所示:
convert.exe -size 150x64 xc:none -fill green
-draw "roundrectangle 10,10 140,54 8,8"
( +clone -alpha extract -blur 0x12 -shade 110x0
-normalize -sigmoidal-contrast 16,60% -evaluate multiply .5
-roll +4+8 +clone -compose Screen -composite ) -compose In -composite
( +clone -alpha extract -blur 0x2 -shade 0x90 -normalize -blur 0x2
+level 60,100% -alpha On ) -compose Multiply -composite
-font Verdana-Bold -pointsize 20 -fill white -stroke black -gravity Center
-annotate 0 "Download" -trim -repage 0x0+7+7
tempbutton.png
convert.exe tempbutton.png
( +clone -background navy -shadow 80x4+4+4 ) +swap -background none -flatten
downloadbutton.png
然后它就起作用了
我如何才能避免将图像保存为最后一步,并执行这一重要命令?您指向示例页面的链接不会让我看到您可能使用的模板(声明“与示例95%相同”) 然而,为了更好的可读性,为了删除打字错误,为了适应我自己的环境(需要
“(…)”
部分用反斜杠转义,如下所示:“\(…)”
,我在最后一个-plant
操作符之前插入了一个额外的-compose src:
convert -size 150x64 xc:none -fill green -draw "roundrectangle 10,10 140,54 8,8" \
\
\( +clone -alpha extract -blur 0x12 -shade 110x0 \
-normalize -sigmoidal-contrast 16,60% -evaluate multiply .5 \
-roll +4+8 +clone -compose Screen -composite \
\) \
\
-compose In -composite \
\
\( +clone -alpha extract -blur 0x2 -shade 0x90 -normalize -blur 0x2 \
+level 60,100% -alpha On \
\) \
\
-compose Multiply -composite \
-font Verdana-Bold -pointsize 20 -fill white -stroke black -gravity Center \
-annotate 0 "Download" -trim -repage 0x0+7+7 \
\
\( +clone -background navy -shadow 80x4+4+4 \
\) \ \
+swap -background none -compose src-over -flatten \
"ButtonTest.png"
原因是:
-compose
是一种图像设置
其默认值为src over
写入最终结果图像之前使用的-plant
操作符只是-layers-plant
操作的快捷方式
-layers flatten
操作的工作原理如下:
convert.exe -size 150x64 xc:none -fill green
-draw "roundrectangle 10,10 140,54 8,8"
( +clone -alpha extract -blur 0x12 -shade 110x0
-normalize -sigmoidal-contrast 16,60% -evaluate multiply .5
-roll +4+8 +clone -compose Screen -composite ) -compose In -composite
( +clone -alpha extract -blur 0x2 -shade 0x90 -normalize -blur 0x2
+level 60,100% -alpha On ) -compose Multiply -composite
-font Verdana-Bold -pointsize 20 -fill white -stroke black -gravity Center
-annotate 0 "Download" -trim -repage 0x0+7+7
tempbutton.png
convert.exe tempbutton.png
( +clone -background navy -shadow 80x4+4+4 ) +swap -background none -flatten
downloadbutton.png
使用当前的-background
颜色和-compose
在画布上依次创建与第一个图像虚拟画布大小相同的画布。位于该画布之外的图像将被剪裁。最终图像的虚拟画布偏移量为零
像-compose…
这样的图像设置会一直保留,直到完整的命令结束,或者直到稍后在命令行上的另一个-compose…
设置显式更改它们
在您执行最终的-plant
(也称-layers展平
)时,先前提供的-compose Multiply
设置仍处于活动状态。这将提供您看到的输出
但是,当您运行第二个单独的命令来创建按钮时,您将重新开始:
以前的-compose Multiply
设置不再为人所知
没有为-flant
操作提供显式的-compose
设置
因此,隐式默认值-compose src over
用于-plant
因此,要将该设置集成到ImageMagick的单个命令中,您必须在写入输出之前运行-compose src over-flatte
来重置先前的-compose multiply
下面是我建议的修改“之前”(命令的输出,左)和“之后”(我的命令的输出,右)的比较:
您应该在这里学习我之前关于“ImageMagick命令行的体系结构”主题的回答:
它解释了以下ImageMagick命令行参数类别的差异。如果要构造发生多个操作的复杂IM命令,了解这些差异至关重要:
图像设置
图像操作符
图像序列操作符
图像堆栈操作符
这是一个很棒的答案。非常感谢你Kurt@Andy:请随意浏览我的其他答案。关于我最喜欢的主题ImageMagick、PDF、PostScript或Ghostscript——也许你会在那里找到其他一些“珍宝”…:-)