Мне нужно установить размер относительно уже установленного размера. Мне это нужно, потому что мой поток включает определение примитивов внутри других. Например,
convert -size 200x100 xc:black \( -size 30x40% xc:red \) -gravity West -composite out.png
То, что 30x40% не работает таким образом, становится пикселями 30x40. Я могу достичь этой заданной цели c в первом примере, используя resize
convert -size 200x100 xc:black \( xc:red -resize 30x40% \) -gravity West -composite out.png
Во второй версии x c: 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 пикселей, 40 % от 200х150. Я хотел бы как-то сбросить размер до размера x c: красный после изменения размера к тому времени, когда я представляю x c: зеленый.