У меня есть изображение, и я хочу сделать его светлее вверху, постепенно исчезая внизу. Так что если изображение изначально было сплошным зеленым, то в конце оно будет выглядеть как градиент от светло-зеленого к зеленому.
Я подумал, что могу сделать что-то вроде этого (наложить белый блок поверх изображения, используя градиент в качестве маски):
convert a.jpg \( +clone -fill white \) \
\( +clone gradient:white-black \) \
-composite out.jpg
Или это («раскрасить» изображение с помощью градиента, переходящего в прозрачный)
convert a.jpg \( +clone 'gradient:black-rgba(0,0,0,0)' \) \
-colorize 50% out.jpg
…но ни то, ни другое не работает.
решение1
convert a.jpg \( +clone -fx 'i/w' \) -compose multiply -composite out.jpg
Это позволит сделать копию изображения и применить-fx
оператор. Формула i/w
проходит по каждому пикселю от i
= 0 до ширины w
таким образом, что слева ( i == 0
) выход равен нулю (черный), а справа ( i == w
) выход равен единице (белый).
Затем скомпонуйте multiply
так, чтобы переход от чистого черного цвета слева к чистому исходному цвету у правого края.
Вы также можете сделать следующее:
convert a.jpg \( +clone \
-fx 'i/w < 0.2 ? 0.2 : (i/w -0.2)*4 + 0.2' \
\) -compose multiply -composite output.jpg
Что затемнит левые 20% изображения на 80%, затем от 40% слева эффект исчезнет, а между 20% и 40% он линейно затухнет.