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オペレーター式は、= 0i/wから幅までの各ピクセルに適用され、左側 ( ) では出力が 0 (黒) になり、右側 ( ) では出力が 1 (白) になります。iwi == 0i == 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% の間では直線的にフェードアウトします。

関連情報