Como aplicar um gradiente a uma imagem no ImageMagick?

Como aplicar um gradiente a uma imagem no ImageMagick?

Eu tenho uma imagem e quero torná-la mais clara na parte superior, desaparecendo sem efeito na parte inferior. Portanto, se a imagem fosse verde sólida no início, no final ela pareceria um gradiente de verde claro para verde.

Achei que poderia fazer algo assim (colocar um bloco branco na parte superior da imagem usando um gradiente como máscara):

convert a.jpg \( +clone -fill white \) \
      \( +clone gradient:white-black  \) \
      -composite out.jpg

Ou isto ('colorir' uma imagem com um gradiente que fica transparente)

convert a.jpg \( +clone 'gradient:black-rgba(0,0,0,0)' \) \
        -colorize 50% out.jpg

…mas nenhum dos dois funciona.

Responder1

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

Isso fará uma cópia da imagem e aplicará o-fxoperador. O forumla i/wpercorre cada pixel de i= 0 até a largura, wde modo que à esquerda ( i == 0) a saída seja zero (preto) e à direita ( i == w) a saída seja um (branco).

Em seguida, componha com multiplypara que desapareça do preto puro no lado esquerdo até o original puro na borda direita.

Você também pode fazer coisas assim:

convert a.jpg \( +clone \
  -fx 'i/w < 0.2 ? 0.2 : (i/w -0.2)*4 + 0.2' \
  \) -compose multiply -composite output.jpg

O que irá escurecer os 20% da esquerda da imagem em 80%, então a partir de 40% da esquerda não tem efeito e entre 20% e 40% desaparece linearmente.

informação relacionada