我目前正在通过命令行使用imagemagick在另一个图像上的多个位置放置水印,但我这样做的方式似乎可能不是最好的方法。
以下是我的表现:
exec("convert 'originalImage.jpg' 'watermark.jpg' -gravity NorthWest -geometry +3+3 -define compose:args=30,100 -compose dissolve -composite 'finalImage.jpg'");
exec("convert 'finalImage.jpg' 'watermark.jpg' -gravity NorthEast -geometry +3+3 -define compose:args=30,100 -compose dissolve -composite 'finalImage.jpg'");
exec("convert 'finalImage.jpg' 'watermark.jpg' -gravity SouthWest -geometry +3+3 -define compose:args=30,100 -compose dissolve -composite 'finalImage.jpg'");
这是(1)使用originalImage.jpg并将watermark.jpg添加到左上角(左上角为3px,使用30%不透明度),然后(2)获取最终的finalImage.jpg和将水印添加到右上角,然后(3)再次获取finalImage.jpg并在左下角添加水印。
所以它重新创建文件三次以得出最终图像。有没有一种简便的方法来做同样的事情,而不必分别保存文件三次?
谢谢!
答案 0 :(得分:1)
以下是使用多个“-draw”选项的另一种解决方案: “-draw”没有“解散”选项,所以你需要准备 水印图像提前有30%的alpha。
convert watermark.jpg -alpha set -channel alpha -fx .30 watermark30.png
convert originalImage.jpg \
-gravity NorthWest -draw "image over 3,3 0,0 watermark30.png" \
-gravity NorthEast -draw "image over 3,3 0,0 watermark30.png" \
-gravity SouthWest -draw "image over 3,3 0,0 watermark30.png" \
finalImage.jpg
您可以将此与Mark的好建议结合使用MPR格式而不是watermark30.png。我做了一些“-draw”与“-composite”时序测试,看起来Mark的方法有点快。
我希望你不介意我编辑你的帖子 - 如果你愿意的话删除它 - 但是这里是一个单一的命令看起来如何一气呵成:
convert watermark.jpg -alpha set -channel alpha -fx .30 -write MPR:wm30 +delete original.jpg \
-gravity NorthWest -draw "image over 3,3 0,0 'MPR:wm30'" \
-gravity NorthEast -draw "image over 3,3 0,0 'MPR:wm30'" \
-gravity SouthWest -draw "image over 3,3 0,0 'MPR:wm30'" \
finalImage.jpg
答案 1 :(得分:0)
不是在计算机上,未经测试,但这应该是关闭的:
convert originalImage.jpg \( watermark.jpg -write MPR:wm \) \
-define compose:args=30,100 -compose dissolve \
-gravity NorthWest -geometry +3+3 -composite \
MPR:wm -gravity NorthEast -geometry +3+3 -composite \
MPR:wm -gravity SouthWest -geometry +3+3 -composite finalImage.jpg
MPR是一个基于RAM的" Magick Persistent Register" ,我用它来避免重新阅读watermark.jpg
。
compose
参数会一直存在,直到更改为止,因此我不会重复这些参数。可能没有必要重复第二和第三-geometry
。