Windows环境ImageMagick v7设置版权文字占父图像宽度15%的方法
Windows cmd环境下ImageMagick固定水印宽度为图片15%的实现方案
问题原因
你之前使用%[fx:w/6]不生效、水印大小不适配的核心原因有三个:
-pointsize参数原生不支持直接传入fx动态表达式赋值- Windows批处理环境中
%是特殊变量标识符,直接写单%的fx表达式会被cmd提前解析吞掉,根本传不到ImageMagick程序里 - 原命令中重复写了两次
-gravity参数,只有最后一个SouthEast会生效,前面的center属于冗余无效代码
实现方案
放弃固定-pointsize的思路,改为先生成文字水印、再按比例动态缩放到目标宽度的方式,兼容性最好,适配所有横竖尺寸的图片。
批处理脚本(.cmd/.bat文件)可用代码
注意批处理中所有fx表达式的%必须双写为%%,避免被cmd解析为变量:
@echo off magick.exe IMAGE.jpg ^ -set option:wm_width "%%[fx:w*0.15]" ^ ( -background none -fill white -font Roboto label:"© Copyright" -trim +repage ) ^ -resize "%%[wm_width]" ^ -gravity SouthEast -geometry +5%+5% ^ -quality 100 -composite IMAGE_COPYRIGHT.jpg
命令行直接执行的代码
如果是直接在cmd窗口手动敲命令运行,把双写的%%改回单个%即可:
magick.exe IMAGE.jpg -set option:wm_width "%[fx:w*0.15]" ( -background none -fill white -font Roboto label:"© Copyright" -trim +repage ) -resize "%[wm_width]" -gravity SouthEast -geometry +5%+5% -quality 100 -composite IMAGE_COPYRIGHT.jpg
参数说明
-set option:wm_width "%%[fx:w*0.15]":提前读取原图宽度,计算出目标水印宽度为原图的15%,存为自定义变量供后续调用- 括号内的部分是单独生成无背景的版权文字标签,
-trim +repage用来裁掉文字周围的多余透明边 -resize "%%[wm_width]":把生成的文字水印等比缩放到之前计算好的目标宽度,高度会自动按文字比例适配,不会变形-geometry +5%+5%:设置水印距离右下角的边距为图片宽高的5%,比固定像素边距的适配性更好,如果你需要固定像素边距,改回原来的+120+110即可
可选优化:如果需要水印在复杂背景下更清晰,可以在括号内的文字生成参数中加
-stroke black -strokewidth 1,给白色文字加1像素的黑色描边。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

