ImageMagick,在转换运算符链中设置相对大小
ImageMagick, set relative size in chain of convert operators
我需要根据已设置的大小设置大小。我需要它,因为我的流程涉及在其他原语中定义原语。例如
convert -size 200x100 xc:black \( -size 30x40% xc:red \) -gravity West -composite out.png
30x40% 不是这样工作的,它变成了 30x40 像素。我可以通过使用 resize
在第一个示例中实现这个特定目标
convert -size 200x100 xc:black \( xc:red -resize 30x40% \) -gravity West -composite out.png
在第二个版本中,xc:red 继承了 200x100 的大小,因此 -resize 可以按预期工作。虽然 further/inner 图元的大小没有减少到 60x40,它仍然是 200x100,所以在第三个例子中,绿色矩形的方向是横向而不是纵向
convert -size 200x150 xc:blue \
\( xc:red -resize 50x100% \
\( xc:green -resize 40% \) \
-gravity Center \
-composite \
\) \
-gravity West \
-composite \
out.png
因此绿色区域为 80x60 像素,占 200x150 的 40%。在我介绍 xc:green.
调整大小后,我想以某种方式将大小重置为 xc:red 的大小
我认为您正在尝试创建 canvases,其中每个都是前一个大小的百分比。可能有一种更简单的方法,但是您可以在创建时将每个 canvas (及其大小)保存在 MPR "Magick Persistent Register" (命名为 RAM 块)中它,然后调用最新的并在每次你想做与它相关的事情时覆盖它:
convert -gravity west -size 200x100 xc:black -write MPR:S \
\( MPR:S -resize 30x40% -fill red -colorize 100 -write MPR:S \) -composite \
\( MPR:S -resize 50x50% -fill blue -colorize 100 -write MPR:S \) -composite \
\( MPR:S -resize 50x50% -fill lime -colorize 100 \) -composite result.png
或者,您可以让 bash
/POSIX shell 在 "arithmetic expression" 中为您完成:
W=200
H=100
convert -gravity west -size ${W}x${H} xc:black \
\( -size $((W=W*30/100))x$((H=H*40/100)) xc:red \) -composite \
\( -size $((W=W*50/100))x$((H=H*50/100)) xc:blue \) -composite \
result.png
请注意 shell 仅处理整数数学,因此如果您的目标是 25 像素的 50%,它不会有好的结果...
我需要根据已设置的大小设置大小。我需要它,因为我的流程涉及在其他原语中定义原语。例如
convert -size 200x100 xc:black \( -size 30x40% xc:red \) -gravity West -composite out.png
30x40% 不是这样工作的,它变成了 30x40 像素。我可以通过使用 resize
在第一个示例中实现这个特定目标convert -size 200x100 xc:black \( xc:red -resize 30x40% \) -gravity West -composite out.png
在第二个版本中,xc:red 继承了 200x100 的大小,因此 -resize 可以按预期工作。虽然 further/inner 图元的大小没有减少到 60x40,它仍然是 200x100,所以在第三个例子中,绿色矩形的方向是横向而不是纵向
convert -size 200x150 xc:blue \
\( xc:red -resize 50x100% \
\( xc:green -resize 40% \) \
-gravity Center \
-composite \
\) \
-gravity West \
-composite \
out.png
因此绿色区域为 80x60 像素,占 200x150 的 40%。在我介绍 xc:green.
调整大小后,我想以某种方式将大小重置为 xc:red 的大小我认为您正在尝试创建 canvases,其中每个都是前一个大小的百分比。可能有一种更简单的方法,但是您可以在创建时将每个 canvas (及其大小)保存在 MPR "Magick Persistent Register" (命名为 RAM 块)中它,然后调用最新的并在每次你想做与它相关的事情时覆盖它:
convert -gravity west -size 200x100 xc:black -write MPR:S \
\( MPR:S -resize 30x40% -fill red -colorize 100 -write MPR:S \) -composite \
\( MPR:S -resize 50x50% -fill blue -colorize 100 -write MPR:S \) -composite \
\( MPR:S -resize 50x50% -fill lime -colorize 100 \) -composite result.png
或者,您可以让 bash
/POSIX shell 在 "arithmetic expression" 中为您完成:
W=200
H=100
convert -gravity west -size ${W}x${H} xc:black \
\( -size $((W=W*30/100))x$((H=H*40/100)) xc:red \) -composite \
\( -size $((W=W*50/100))x$((H=H*50/100)) xc:blue \) -composite \
result.png
请注意 shell 仅处理整数数学,因此如果您的目标是 25 像素的 50%,它不会有好的结果...