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-fx
operador. O forumla i/w
percorre cada pixel de i
= 0 até a largura, w
de 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 multiply
para 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.