我正在研究ImageMagick的例子" Gel"对ImageMagick Example pages的影响。
我没有在中间图像的许多步骤中执行ImageMagick脚本,而是希望在没有中间文件的情况下一步完成。
我的代码看起来像这样(与示例相同95%):
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
( +clone -background navy -shadow 80x4+4+4 ) +swap -background none -flatten
ButtonTest.png"
这些步骤是示例中步骤的副本。
问题是最后一个克隆步骤:
( +clone -background navy -shadow 80x4+4+4 ) +swap -background none -flatten
导致非常好的图像变暗。即没有添加阴影。直到该步骤,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
然后在tempbutton上执行最后一次克隆,如下所示:
convert.exe tempbutton.png
( +clone -background navy -shadow 80x4+4+4 ) +swap -background none -flatten
downloadbutton.png
然后它有效。
如何避免将图像保存为最后一步,并将其作为一个大命令?
答案 0 :(得分:2)
您指向示例页面的链接不会引导我使用您可能用作模板的内容(说明它的“95%与示例相同”)。
然而,经过一些重新格式化以获得更好的可读性,删除拼写错误以及适应我自己的环境(需要使用反斜杠转义 " (...) "
部分,如下所示: " \( ... \) "
,我在最终的-compose src-over
运营商之前插入了额外的-flatten
:
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 <some-composite-operator>
是 图像设置 。
其默认值为src-over
。
在编写最终结果图片之前使用的-flatten
运算符只是-layers flatten
操作的快捷方式。
-layers flatten
操作的工作原理如下:
“使用当前
-background
颜色创建第一个图像虚拟画布大小的画布,然后将-compose
每个图像依次放到该画布上。剪裁掉画布外的图像。最终图像将虚拟画布偏移量为零。“ see IM docu
图像-compose ...
之类的设置会一直持续到完成命令结束,或者直到命令行稍后由另一个-compose ...
设置明确更改为止。
在您执行最终-compose Multiply
(a.k.a。-flatten
)时,您之前提供的-layers flatten
设置仍处于有效状态。这给出了你看到的输出......
但是,当您运行第二个单独的命令来创建按钮时,重新开始:
-compose Multiply
设置已不再为人所知。-compose <something>
操作未提供显式 -flatten
设置。-compose src-over
用于-flatten
。因此,要将该设置集成到ImageMagick的单个命令中,您必须在写入输出之前通过运行-compose multiply
来重置先前的-compose src-over -flatten
。
这是比较“之前”(你的命令输出,左)和“之后”(我的命令输出,右边)我提出的修改:
你应该在“ImageMagick命令行的架构”主题上学习我以前的答案:
它解释了以下类别的ImageMagick命令行参数的区别。如果要构建具有多个操作的复杂IM命令,要理解这些差异是必不可少的: