尝试将此ImageMagick命令转换为Python Wand代码,但我看不到使用Wand创建渐变图像的方法。
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
有人知道我可以用魔杖实现吗?
答案 0 :(得分:2)
您将需要分配一个魔杖实例,设置画布大小,然后读取伪图像格式。
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")
答案 1 :(得分:1)
等效于魔杖的ImageMagick
我还没有使用过魔杖,但是我可以通过参考ImageMagick向您展示如何做。您可以创建一个新的透明图像。然后使用fx运算符将alpha通道修改为渐变。
等效的魔杖参考是:
创建一个新的透明图像(默认设置)-请参见http://docs.wand-py.org/en/0.4.1/guide/read.html?highlight=new%20image#open-empty-image
使用fx将Alpha通道转换为渐变-请参见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
这是我得到fx公式的方法:
您希望顶部的灰阶为12%(0.12),底部的灰阶为100%(1.0)。因此,我们采用公式:
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是图像的高度(800)。
答案 2 :(得分:1)
这是我根据fmw42反馈解决的方法
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)