Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ImageMagick,在转换运算符链中设置相对大小_Imagemagick - Fatal编程技术网

ImageMagick,在转换运算符链中设置相对大小

ImageMagick,在转换运算符链中设置相对大小,imagemagick,Imagemagick,我需要设置相对于已设置大小的大小。我需要它,因为我的流程涉及到在其他原语中定义原语。乙二醇 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

我需要设置相对于已设置大小的大小。我需要它,因为我的流程涉及到在其他原语中定义原语。乙二醇

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可以正常工作。虽然进一步/内部基本体的大小没有减小到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。

我认为您正在尝试创建画布,其中每个画布都是前一个画布大小的一个百分比。可能有一种更简单的方法,但您可以在创建画布时将其保存在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
/posixshell在一个“算术表达式”中为您执行此操作:


请注意,shell只处理整数数学,因此,如果您的目标是25像素的50%,那么它不会有好的结局…

尝试+重新分页,不起作用请说出您想要实现的目标!我有一种思维方式,比如“黑色正方形,颜色右半红色,一半红色,中间放黄色矩形,大小是红色矩形的一半;然后在最后一个黄色矩形的底部放一个蓝色圆圈”;这是一种考虑嵌套元素的方法。我正在将这种思维方式映射到ImageMagick原语中。我知道,经过这样一系列思考后,我可以从内到外重新组合图像。答案被接受,因为我不知道MPR,使用MPR,您可以将大小缓存为图像,然后用所需内容“覆盖”它们。
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