1

我想拍攝一張圖像,並從imagemagick http://www.imagemagick.org/Usage/transform/#polaroid中添加以下效果。我已經搜索了Python代碼示例並且不成功。我不需要使用imagemagick(魔杖,pythonmagick等),這只是我能找到的唯一例子。我不想使用列出的命令行示例。我很樂意能夠將其包含在我的照片展臺python代碼中。Polaroid與Python中的圖像效果

+0

爲什麼你不希望使用一個子進程/命令行基礎的方法?這是最簡單,最強大的(訪問所有選項)。魔杖似乎不支持它(寶麗來),Pythonmagick甚至沒有編譯我的系統,我不知道這些庫交織在一起(支持一切)。使用python的[tempfile](https://docs.python.org/3.5/library/tempfile.html),基於cli的方法可能非常乾淨。 – sascha

+0

我不熟悉python的tempfile模塊。你有沒有一個例子可以在python腳本中清晰地運行polaroid命令? –

回答

0

隨着,你將需要實現C-API方法MagickPolaroidImage & MagickSetImageBorderColor

import ctypes 

from wand.api import library 
from wand.color import Color 
from wand.drawing import Drawing 
from wand.image import Image 

# Tell Python about C library 
library.MagickPolaroidImage.argtypes = (ctypes.c_void_p, # MagickWand * 
             ctypes.c_void_p, # DrawingWand * 
             ctypes.c_double) # Double 

library.MagickSetImageBorderColor.argtypes = (ctypes.c_void_p, # MagickWand * 
               ctypes.c_void_p) # PixelWand * 


# Define FX method. See MagickPolaroidImage in wand/magick-image.c 
def polaroid(wand, context, angle=0.0): 
    if not isinstance(wand, Image): 
     raise TypeError('wand must be instance of Image, not ' + repr(wand)) 
    if not isinstance(context, Drawing): 
     raise TypeError('context must be instance of Drawing, not ' + repr(context)) 
    library.MagickPolaroidImage(wand.wand, 
           context.resource, 
           angle) 

# Example usage 
with Image(filename='rose:') as image: 
    # Assigne border color 
    with Color('white') as white: 
     library.MagickSetImageBorderColor(image.wand, white.resource) 
    with Drawing() as annotation: 
     # ... Optional caption text here ... 
     polaroid(image, annotation) 
    image.save(filename='/tmp/out.png') 

Polaroid effect with Python & wand

+0

有沒有辦法操縱陰影?隨着更大的圖像,陰影看起來不太吸引人! –