【问题标题】:mogrify with caption (imagemagick or graphicsmagick)带标题的 mogrify(imagemagick 或 graphicsmagick)
【发布时间】:2019-11-17 01:28:33
【问题描述】:

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

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

我想使用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

【问题讨论】:

  • 你不能以这种方式在 mogrify 中进行复合操作。唯一的方法是预先创建额外的文本标题图像,然后使用 -draw 进行合成。您将需要遍历每个图像并使用magick(代替转换)对其进行处理,并将输入保存为具有相同名称的输出。 Mogrify 单独处理每张图片,不允许进行合成等多图片操作。请参阅 imagemagick.org/Usage/basics/#mogrifyimagemagick.org/Usage/basics/#mogrify_compose。代替标题和合成,您可以使用 -draw 或 -annotate 插入文本。
  • 嗯,我明白了.. 但是如果我需要自动换行怎么办/这是我使用标题的主要原因。 magickconvert 之间的区别是什么?我将输出文件名设置为与输入名称相同(将 output.jpg 替换为上面的 input.jpg),它似乎可以工作,但我不确定是否有一些副作用

标签: imagemagick imagemagick-convert graphicsmagick


【解决方案1】:

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"

【讨论】:

    【解决方案2】:

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

    这里有 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
    


    这个比较简单,没有范围,只是追加:

    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,删除之前(和之前)的 \。

    【讨论】:

    • 太棒了,谢谢!!!我非常感谢您编写不同示例的方式,我这样做了好几个小时,但并没有真正取得任何进展。
    • 一个快速的问题——我将如何做第一种方法,但将高度限制为 3 行(所以文本会被截断)?此外,如果它只有 1-2 行文本(而不是 3 行),则空白区域应位于文本下方(因此文本最接近图像)。再次感谢您的帮助
    • 带标题:您不能将文本限制为某些行数。但是,您可以使用 label: 而不是 caption: 并放入您自己的换行符并限制您提供的文本。要将文本放在图像旁边,最好只使用附加而不是合成。如果您在底部需要更多空间,可以在末尾使用 -extent 或 -splice 在底部添加空白空间。
    • 对不起,当我说“限制”时,我并不是指实际限制文本,我只是指限制标题的大小,以便简单地隐藏任何溢出(因此句子在中间切断)。我将使用您的第一个版本,但问题是,如果文本只有 2 行,它不会,而是靠在图像的底部(底部有空白),它会将空白放在文本上方(所以文本转到画布的最底部)。我的目标是文本总是从图像下方开始,无论是 1、2、3 行,如果是 4 行,它就会被截断
    • 实际上,如果我将您的“仅附加”方法更改为 NorthWest,它会非常完美,我只想在图像下方多留出 5px 的空间,非常完美!我尝试使用几何 +0+5 但没有骰子
    【解决方案3】:

    这是使用 ImageMagick 将文本限制为 3 行中的 2 行的一种方法。但是你必须知道它会是 3 行。

    我在修剪后得到文本图像的宽度和高度,然后将其裁剪到 2/3 高度。请注意,我使用 -smush +5 在图像和文本之间添加空格,而不是 -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
    


    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      相关资源
      最近更新 更多