使用Wand填充带有预定义图案的图像

时间:2016-07-17 21:58:22

标签: python imagemagick composite wand

我有一个图像(像那样:mask)和两个整数,它代表一个最终的图像宽度&高度。根据Wand的文档Open empty image

with Image(width=200, height=100) as img:
    img.save(filename='200x100-transparent.png')

这将导致透明背景的空图像。 现在,问题是:如何创建一个相同的空图像,但使用 mask 图像作为背景图案?

composite CLI命令本身有以下运算符:

-tile repeat composite operation across and down image

但如何用魔杖实现同样的目标?

2 个答案:

答案 0 :(得分:2)

好吧,在查看ImageMagick的Composite source code之后,很明显,Wand驱动的解决方案看起来应该是这样的:

with Image(width=x, height=y) as img:
    for x in xrange(0, img.width, crop_mask_path.width):
        for y in xrange(0, img.height, crop_mask_path.height):
            img.composite_channel('default_channels', crop_mask_path, 'over', x, y)
    img.save(filename='patterned_image.png')

答案 1 :(得分:0)

在我看来,构建标题迭代器是the best solution。然而,另一个 hackish 方法是调用tile:协议,并允许内部ImageMagick方法处理组合。您将失去由DIY继承的控件,但在优化的IM系统上获得一些性能。

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

with Image() as img:
   # Same as `-size 400x400' needed by tile: protocol.
   library.MagickSetOption(img.wand, 'size', '400x400')
   # Prefix filename with `tile:' protocol.
   img.read(filename='tile:rose.png')
   img.save(filename='tile_rose.png')

pre defined pattern with wand