2015-01-08 102 views
0

我想绘制一个图像到另一个图像与魔杖(Python的ImageMagick绑定)。源图像应完全替换目标图像(在给定的位置)。在imagemagick中将图像绘制到另一个图像中?

我可以使用:

destinationImage.composite_channel(channel='all_channels', image=sourceImage, operator='replace', left=leftPosition, top=topPosition) 

但我在想,如果有一个简单的或更快的解决方案。

回答

2

但我想知道是否有一个简单或更快的解决方案。

不是。在的范围内,这将是最快的方法之一。为了简单起见,您已经在一行代码中做了所有事情。也许你可以用Image.composite减少这个。

destinationImage.composite(sourceImage, leftPosition, topPosition) 

但是,您的现在妥协了您当前解决方案的可读性。完整的命令与channel='all_channels' & operator='replace' kwargs将从长远来帮助你。考虑一年内重新审视代码。

destinationImage.composite(sourceImage, leftPosition, topPosition) 
# versus 
destinationImage.composite_channel(channel='all_channels', 
            image=sourceImage, 
            operator='replace', 
            left=leftPosition, 
            top=topPosition) 

马上,没有击中API文档,你知道第二种选择是用所有通道的源图像替换目标。这些事实在第一种变化中被隐藏或假定。

+0

谢谢!告诉我,如果我错了,但我明白'composite()'和'composite_channel(channel ='all_channels',operator ='replace')'不执行相同的操作:在第一种情况下,两个图像混合第一幅图像的完全透明的部分不会改变目标图像),而在第二种情况下,目标图像将被源图像完全替换(在感兴趣的区域中)。 –

+0

@ arthur.sw你是正确的,他们执行不同的操作。它们将C-API和**复合** [默认为'over'](https://github.com/dahlia/wand/blob/master/wand/image.py#L1643)操作分开。但是,如果没有看到你在做什么/期望的高级别,我将关注一个图像在另一个图像上的行为。 – emcconville

相关问题