带有标题的 mogrify(imagemagick 或 graphicsmagick)

mogrify with caption (imagemagick or graphicsmagick)

我正在尝试对图像执行多项操作(调整大小、裁剪、在底部添加一些空白 space)。

然后我尝试在那个空白处添加标题 space。

我想使用 mogrify 以便我可以编辑现有文件,而不是创建一个新文件(它会大量使用)。

这给我一个错误,我不太清楚该怎么做。不过,它确实适用于 convert

magick mogrify -resize 300x -crop 300x200+0+50 -extent 300x290 input.jpg -size 300x90 -gravity SouthWest -font "Arial" -pointsize 24 -fill black caption:'dis some really long shit that goes on 3 lines onmg how will it ever the' -composite -quality 100

magick 是 V7 中 convert 的新名称。大概是为了避免 Windows 内置转换程序

的问题

注意:将标题创建为内存中的单独图像,并将其与原始图像合并。

旧的转换程序展示了一种使用变量中的图像的方法php

$size = getimagesize( $input ); 
$cmd = " $input ( -size {$size[0]}x30". 
" -background black -fill white". 
" -pointsize 16 -gravity center". 
" caption:\"Caption\" -flatten ) -append "; 
exec("convert $cmd caption_size.jpg");

使用 magick 的示例 - 注意 -size 中的快捷方式,它将图像大小保存到变量中。使用 Windows

一次
magick "input.jpeg" ( -size "fx:w"x30 -background black -fill white -pointsize 30 -gravity center caption:"Caption" -flatten ) -append "output.jpg"

magick 是IM 7 的,convert 是IM 6 的。如果你需要做mogrify,那么你必须在单独的命令中准备文本图像并保存它。然后在mogrify中使用-draw进行合成。但是如果您一次只处理一张图像,那么转换是更灵活的选项,并且允许复合语句和合成。 Mogrify 不允许同时输入和输出图像。它需要一个星号通配符(或一个文件)并处理它,将输出写入输入,除非您提供输出目录。请参阅我在上一条评论中提到的链接。

这里有 3 种方法。前两个在 IM 7 上使用 magick,第三个使用 magick 创建文本图像,然后使用 magick mogrify 使用 -draw 合成它。我建议你使用第二种方法,如果你有很多图像要处理,然后在每个输入图像上写一个脚本循环。

输入:

这里使用复合:

magick lena.jpg -resize 300x -crop 300x200+0+50 +repage -extent 300x290 \( -size 300x90 -gravity SouthWest -font "Arial" -pointsize 24 -fill black caption:'This is some really long stuff that goes on 3 lines so how will it ever fit' \) -compose over -composite -quality 100 lena_result1.jpg


这个比较简单,没有extent,直接追加:

magick lena.jpg -resize 300x -crop 300x200+0+50 +repage \( -size 300x90 -gravity SouthWest -font "Arial" -pointsize 24 -fill black caption:'This is some really long stuff that goes on 3 lines so how will it ever fit' \) -append -quality 100 lena_result2.jpg


这将创建文本图像并另存为 tmp.png:

magick -size 300x90 -gravity SouthWest -font "Arial" -pointsize 24 -fill black caption:'This is some really long stuff that goes on 3 lines so how will it ever fit' text.png


然后它使用 -draw 将 test.png 图像合成到 magick mogrify 的一个输入上,它总是在命令的最后指定。输出覆盖此输入:

magick mogrify -resize 300x -crop 300x200+0+50 +repage -extent 300x290 -draw "gravity southwest image over 0,0 0,0 'text.png'" lena2.jpg


在上面,我使用了 Unix 语法。对于 Windows,删除之前 ( 和之前 ) 中的 \。

这是使用 ImageMagick 将文本限制为 3 行中的 2 行的一种方法。但是你要知道本来就是3行。

我得到文字图片裁剪后的宽高,然后裁剪到2/3高度。请注意,我使用 -smush +5 在图像和文本之间添加 space 而不是 -append.

输入:

magick lena.jpg -resize 300x -crop 300x200+0+50 +repage \( -size 300x90 -gravity NorthWest -font "Arial" -pointsize 24 -fill black caption:'This is some really long stuff that goes on 3 lines so how will it ever fit' -trim +repage -set option:WxH "%wx%[fx:round(h*2/3)]" -crop "%[WxH]+0+0" +repage \) -smush +5 -quality 100 lena_result2.jpg