Хотя было предоставлено хотя бы одно приемлемое решение, вот еще пара идей ...
Пример 1. Эта команда создает красно-синий градиент готовых размеров, обрезает его до вершины и нижняя половина, изменяет их размер до 40 и 60 процентов от входной высоты и добавляет их обратно, чтобы создать одно изображение. То, что начиналось как цвет в точном вертикальном центре, теперь находится на 40% вниз от вершины с чистыми градиентами, идущими вверх и вниз оттуда.
convert -size 200x600 gradient:red-blue -crop 1x2@ \
\( -clone 0 -resize 100x40% \) \( -clone 1 -resize 100x60% \) \
-delete 0,1 -append result.png
Это разделяет изображение градиента на верхнюю и нижнюю половину, затем в круглых скобках размер каждого из них изменяется до требуемой пропорции. После этого он удаляет кадрирования 50/50 из скобок, добавляет два оставшихся изображения с измененным размером и записывает выходные данные.
Пример 2: Следующий пример начинается с создания красно-синего градиента в конечных измерениях , затем устанавливает переменные для хранения верхнего цвета, точного среднего цвета и нижнего цвета.
Затем в первых скобках он клонируется и обрезает изображение до 60% от его первоначальной высоты. Он использует "-sparse-color", чтобы заполнить его градиентом от "color1" до "color2".
Во вторых скобках он клонирует и обрезает изображение до 40% от его первоначальной высоты, используя "- sparse-color "снова заполняет его градиентом от" color2 "до" color3 ".
После создания этих двух градиентов удалите оригинал, добавьте два других вместе и запишите выходные данные.
convert -size 200x600 gradient:red-blue \
-set option:color1 "%[pixel:p{0,0}]" \
-set option:color2 "%[pixel:p{0,h/2}]" \
-set option:color3 "%[pixel:p{0,h}]" \
\( -clone 0 -extent 100x60% \
-sparse-color barycentric "0,0 %[color1] 0,%[h] %[color2]" \) \
\( -clone 0 -extent 100x40% \
-sparse-color barycentric "0,0 %[color2] 0,%[h] %[color3]" \) \
-delete 0 -append result.png