画像があり、上部を明るくして、下部では効果がなくなるようにしたいと考えています。つまり、画像が最初は単色の緑だった場合、最終的には明るい緑から緑へのグラデーションのように見えることになります。
私は次のようなことができると考えました (グラデーションをマスクとして使用して、画像の上に白いブロックを合成します)。
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
オペレーター式は、= 0i/w
から幅までの各ピクセルに適用され、左側 ( ) では出力が 0 (黒) になり、右側 ( ) では出力が 1 (白) になります。i
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% の間では直線的にフェードアウトします。