如何使用 python 魔杖执行 ImageMagick 梯度调用

How to perform ImageMagick gradient call with python 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

有谁知道我如何用魔杖做到这一点?

与 Wand 一起使用的 ImageMagick 等价物

我没用过Wand,但是我可以参考ImageMagick来教你怎么用。您可以创建一个新的透明图像。然后使用 fx 运算符将 alpha 通道修改为渐变。

等效的 Wand 引用是:

创建新的透明图像(默认)- 请参阅 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 公式的方法:

您想要顶部 (0.12) 的 12% 灰色和底部 (1.0) 的 100% gray/white。所以我们取公式:

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)。

这是我根据 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)

您需要分配一个 wand 实例,设置 canvas 大小,然后读取伪图像格式。

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