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?
3 Antworten
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)
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")
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
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).
Verwandte Fragen
Neue Fragen
python-2.7
Python 2.7 ist die letzte Hauptversion der 2.x-Reihe und wird seit dem 1. Januar 2020 nicht mehr gewartet. Verwenden Sie das generische [Python] -Tag für alle Python-Fragen. Fügen Sie dieses Tag nicht einfach hinzu, um die von Ihnen verwendete Python-Version zu übermitteln, es sei denn, die Frage betrifft ein spezifisches Problem für Python 2.7.