Wie wende ich in ImageMagick einen Farbverlauf auf ein Bild an?

Wie wende ich in ImageMagick einen Farbverlauf auf ein Bild an?

Ich habe ein Bild und möchte es oben heller machen, sodass es unten ohne Effekt verblasst. Wenn das Bild also anfangs einfarbig grün wäre, würde es am Ende wie ein Farbverlauf von Hellgrün nach Grün aussehen.

Ich dachte, ich könnte so etwas machen (einen weißen Block über das Bild legen und dabei einen Farbverlauf als Maske verwenden):

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

Oder dies („ein Bild mit einem Farbverlauf einfärben“, der in Transparenz übergeht)

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

…aber beides funktioniert nicht.

Antwort1

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

Dadurch wird eine Kopie des Bildes erstellt und die-fxOperator. Die Formel i/wgeht über jeden Pixel von i= 0 bis Breite w, so dass links ( i == 0) die Ausgabe Null (schwarz) und rechts ( i == w) die Ausgabe Eins (weiß) ist.

Komponieren Sie dann multiplyso, dass es von reinem Schwarz auf der linken Seite zum reinen Original am äußersten rechten Rand übergeht.

Sie können auch Folgendes tun:

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

Dadurch werden die linken 20 % des Bildes um 80 % abgedunkelt, ab 40 % von links hat es keine Wirkung mehr und zwischen 20 % und 40 % wird es linear ausgeblendet.

verwandte Informationen