Ich habe versucht, diesen ImageMagick-Befehl in Python Wand-Code zu konvertieren, sehe aber kein Mittel, um mit Wand ein Verlaufsbild zu erstellen.

    convert -size 800x800 gradient:"rgba(0,0,0,0.12)-rgba(0,0,0,1)" gradient_overlay.png

    convert gradient_overlay.png background.png -compose Overlay -composite -depth 8 background_gradient.png

Weiß jemand, wie ich das mit dem Zauberstab erreichen kann?

1
neuroh 23 Juni 2018 im 06:50

3 Antworten

Beste Antwort

Hier ist, wie ich es basierend auf fmw42 Feedback gelöst habe

with Color('black') as blackColor:
with Image(width=800, height=800, background=blackColor) as black:
    blackPath = existing[:existing.rfind('/') + 1] + 'black.png'
    with Color('white') as whiteColor:
        with Image(width=800, height=800, background=whiteColor) as alpha:
            fxFilter = "(j*(1-0.12)/(h-1)+0.12)"
            with alpha.fx(fxFilter) as filteredImage:
                black.composite_channel('default_channels', filteredImage, 'copy_opacity', 0, 0)
                black.save(filename=blackPath)
1
neuroh 24 Juni 2018 im 00:40

Sie müssen eine Instanz des Zauberstabs zuweisen, die Leinwandgröße festlegen und dann das Pseudobildformat lesen.

from wand.image import Image
from wand.api import library

with Image() as canvas:
    library.MagickSetSize(canvas.wand, 800, 800)
    canvas.read(filename="gradient:rgba(0,0,0,0.12)-rgba(0,0,0,1)")
    canvas.save(filename="gradient_overlay.png")

gradient_overlay.png

2
emcconville 25 Juni 2018 im 12:52

ImageMagick-Äquivalent zur Verwendung mit dem Zauberstab

Ich habe Wand nicht verwendet, aber ich kann Ihnen anhand von ImageMagick zeigen, wie es geht. Sie können ein neues transparentes Bild erstellen. Verwenden Sie dann den fx-Operator, um den Alphakanal in einen Farbverlauf zu ändern.

Die entsprechenden Zauberstabreferenzen sind:

Erstellen Sie ein neues transparentes Bild (Standardeinstellung) - siehe http://docs.wand-py.org/en/0.4.1/guide/read.html?highlight=new%20image#open-empty-image

Verwenden Sie fx, um den Alphakanal in einen Farbverlauf umzuwandeln - siehe http: //docs.wand-py.org/en/0.4.1/wand/image.html

convert -size 800x800 xc:transparent -channel a -fx "(j*(1-0.12)/(h-1)+0.12)" +channel alpha.png


Bildbeschreibung hier eingeben

Hier ist, wie ich die FX-Formel bekommen habe:

Sie möchten oben 12% Grau (0,12) und unten 100% Grau / Weiß (1,0). Also nehmen wir die Formel:

c = a*j + b

At j=0 the top, you need 0.12, so

0.12 = a*0 + b -->  b = 0.12

At j=(h-1) the bottom, you want 1, so 

1 = a*(h-1) + 0.12 --> a = (1-0.12)/(h-1)

So the equation is:

c = j*(1-0.12)/(h-1) + 0.12

H ist die Höhe des Bildes (800).

1
fmw42 23 Juni 2018 im 22:15