使用wand-py访问不受支持的API?

时间:2014-02-03 07:46:57

标签: magickwand wand

如何通过Python Wand界面访问不受支持的Wand API?例如,我希望调用Wand API MagickAddNoiseImage,但它在Python界面中不可用。

1 个答案:

答案 0 :(得分:1)

使用wand.api访问不受支持的API非常简单,但您需要打开ImageMagick的docs / header文件以供参考。

from wand.api import library
import ctypes

# Re-create NoiseType enum
NOISE_TYPES = ('undefined', 'uniform', 'gaussian', 'multiplicative_gaussian',
               'impulse', 'laplacian', 'poisson', 'random')
# Map API i/o
library.MagickAddNoiseImage.argtypes = [ctypes.c_void_p,
                                        ctypes.c_uint]
library.MagickAddNoiseImage.restype = ctypes.c_int

# Extend wand's Image class with your new API
from wand.image import Image
class MySupportedImage(Image):
  def add_noise(self, noise_type):
    """My MagickAddNoiseImage"""
    if noise_type not in NOISE_TYPES:
      self.raise_exception()
    return library.MagickAddNoiseImage.argtypes(self.resource,
                                                NOISE_TYPES.index(noise_type))

如果您的解决方案有效,请考虑提交解决方案back to the community(在您创建了可靠的单元测试之后)。