2017-04-20 44 views
0

我目前使用imagemagick通过命令行将水印放置在另一个图像上的多个位置,但是我做这件事的方式好像可能不是这样,最好的方式去做这件事。如何使用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

我的回答或其他人解答了您的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过点击投票计数旁边的空心绿色勾号/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

回答

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永久寄存器”我使用,以避免需要不断重新阅读watermark.jpg

compose争论一直持续到更改,所以我不再重复。可能不需要重复第二个和第三个-geometry

+0

这应该有效,但它可能更简单,可能更快,只需做一个“转换”与几个“-draw image ...”选项。 –

+0

@ GlennRanders-Pehrson,你能举出一个你提到的方法更完整的例子吗?谢谢! –

+0

谢谢@MarkSetchell。明天早上我会拍这张照片,让你知道它是怎么回事。 –

1

这里是另一个解决方案使用多个“-draw”选项: “-draw”没有“解散”选项,所以你需要提前准备的时间 水印图像具有30%的α。

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”与“复合”时间测试,看起来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 

enter image description here

相关问题