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

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

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 ответ1

0
convert a.jpg \( +clone -fx 'i/w' \) -compose multiply -composite out.jpg

Это возьмет копию изображения и применяет оператор -fx. Forumla 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% оно линейно исчезнет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .