【问题标题】:How to use ImageMagick to place a watermark in multiple locations on an image如何使用 ImageMagick 在图像的多个位置放置水印
【发布时间】:2017-04-20 17:10:47
【问题描述】:

我目前正在通过命令行使用 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 并将水印添加到左下角。

所以它重新创建文件 3 次以生成最终图像。有没有一种简便的方法来做同样的事情,而不必分别保存文件三次?

谢谢!

【问题讨论】:

    标签: imagemagick imagemagick-convert


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      不是在电脑上,所以未经测试,但这应该很接近:

      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

      【讨论】:

      • 这应该可以,但是用几个“-draw image ...”选项进行一次“转换”可能更简单,也可能更快。
      • @GlennRanders-Pehrson,你能举一个更完整的例子来说明你提到的方法吗?谢谢!
      • 感谢@MarkSetchell。明天早上我会试一试,然后告诉你进展如何。
      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 2021-11-11
      • 2021-02-02
      • 2010-11-16
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多