如何使用python魔杖执行ImageMagick渐变调用

时间:2018-06-23 03:50:46

标签: python-2.7 imagemagick wand

尝试将此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

有人知道我可以用魔杖实现吗?

3 个答案:

答案 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")

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


enter image description here

这是我得到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)