Градиентное соотношение ImageMagick - PullRequest
0 голосов
/ 22 апреля 2020

Как настроить соотношение цветов градиента?

В настоящее время я использую следующее для создания градиента.

convert -size 200x600 gradient:none-black output.png

default

adjusted

Ответы [ 4 ]

3 голосов
/ 25 апреля 2020

Хотя было предоставлено хотя бы одно приемлемое решение, вот еще пара идей ...

Пример 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
2 голосов
/ 23 апреля 2020

Может быть, вы захотите это, когда вы доберетесь до наполовину красного / наполовину синего цвета всего лишь на 20% ниже высоты изображения. Это делается путем создания двух градиентов разной длины и размещения их вплотную:

midcolour="rgb(127,0,127)"
convert -size 100x20 gradient:red-"$midcolour"  \
        -size 100x80 gradient:"$midcolour"-blue \
        -append result.png

enter image description here

Другой способ - поместить 3 одинарных пикселей вместе в ряд, а затем изменить размер до того, что вы хотите. Я знаю, что вы хотите, чтобы середина была на 40% красной и на 60% синей, но для удобства просмотра я сделаю ее светло-зеленой:

convert -size 1x1 xc:red xc:lime xc:blue -append -resize 100x100\! result.png

enter image description here

Вы бы изменили lime на что-то вроде "rgb (100,0,155)".

0 голосов
/ 23 апреля 2020

У меня есть сценарий оболочки Imagemagick bash, называемый multigradient, который может делать то, что вы хотите. Это позволяет вам создавать градиенты многих цветов, каждый из которых имеет остановки, чтобы указать, где они начинаются. Например:

multigradient -w 200 -h 600 -s "blue 0 red 80" -d to-top result.png


Первый цвет должен начинаться с 0, но в направлении может быть много вариантов. Здесь я go снизу вверх с чистым синим цветом снизу и чистым красным цветом, начиная с 80 сверху вниз и направляясь к вершине

enter image description here

( См. )

0 голосов
/ 22 апреля 2020

Я не совсем уверен, что понимаю. Но если вы хотите начать с 90% прозрачности (10% непрозрачный черный) и закончить черным. Вы можете сделать:

convert -size 200x600 gradient:"graya(0,0.1)-black" output.png


Грейа означает серый с альфа. Таким образом, graya (0,0.1) является серым (0) или черным с непрозрачностью 0,1 фракции, поэтому прозрачность 90%.

Возможно, это то, что вы хотите:

Обычный 50-50:

convert -size 200x600 gradient:red-blue red_blue1.png


enter image description here

60-40:

rr=`convert xc: -format "%[fx:0.6*255]" info:`
bb=`convert xc: -format "%[fx:0.4*255]" info:`
convert -size 200x600 gradient:"rgb($rr,0,$bb)-rgb(0,0,255)" red_blue2.png


enter image description here

Или, возможно, это то, что вы хотите:

bb=`convert xc: -format "%[fx:0.1*255]" info:`
convert -size 200x600 gradient:"rgb(255,0,$bb)-rgb(0,0,255)" red_blue3.png


enter image description here

...