Как применить градиент к изображению в ImageMagick?

Как применить градиент к изображению в ImageMagick?

У меня есть изображение, и я хочу сделать его светлее вверху, постепенно исчезая внизу. Так что если изображение изначально было сплошным зеленым, то в конце оно будет выглядеть как градиент от светло-зеленого к зеленому.

Я подумал, что могу сделать что-то вроде этого (наложить белый блок поверх изображения, используя градиент в качестве маски):

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% он линейно затухнет.

Связанный контент