2009-11-16 9 views

risposta

-11

Si tratta di un binding al MagickWand API: http://www.assembla.com/wiki/show/pythonmagickwand

in modo da poter utilizzare tutte le funzioni API MagickWand.

#!/usr/bin/python 
import Magick 

# Use the Python Imaging Library to create a Tk display 
dpy = Magick.TkDisplay(startmain=0) 

# Read the image 
img = Magick.read('test.gif') 

# Display the image 
dpy(img) 
dpy(img.Swirl(90)) 

dpy.startmain=1 
dpy.show() 
+26

Non so perché questo è stato accettato, non è corretto. Esistono * due diverse API Python-ImageMagick *. L'OP ne sta interrogando uno (PythonMagick), e tu stai rispondendo con le informazioni sull'altro (PythonMagickWand). –

+0

Sì, mio ​​male, non lo so neanche io. – Natim

31

non riuscivo a trovare da nessuna parte neanche, ma questo è come sono andato su come utilizzare comunque.

Esempio

import PythonMagick 
image = PythonMagick.Image("sample_image.jpg") 
print image.fileName() 
print image.magick() 
print image.size().width() 
print image.size().height() 

Con output come questo

sample_image.jpg 
JPEG 
345 
229 

per scoprire quali sono disponibili per esempio ho guardato nella sorgente cpp metodi di immagine. Assunzione dell'oggetto Immagine Immagine vincolante: Immagine implementata in _Image.cpp O meglio ancora guardare il suggerimento per ottenere i metodi contenuti in un'altra risposta da Klaus su questa pagina.

In questo file vedrete linee come questo

.def("contrast", &Magick::Image::contrast) 
    .def("convolve", &Magick::Image::convolve) 
    .def("crop", &Magick::Image::crop) 
    .def("cycleColormap", &Magick::Image::cycleColormap) 
    .def("despeckle", &Magick::Image::despeckle) 

Il bit tra virgolette associato al nome della funzione dell'oggetto Immagine. Seguendo questo approccio puoi capire abbastanza per essere utile. Per esempio Geometria metodi specifici sono in _Geometry.cpp e comprendono i soliti sospetti come

 .def("width", (size_t (Magick::Geometry::*)() const)&Magick::Geometry::width) 
    .def("height", (void (Magick::Geometry::*)(size_t))&Magick::Geometry::height) 
    .def("height", (size_t (Magick::Geometry::*)() const)&Magick::Geometry::height) 
    .def("xOff", (void (Magick::Geometry::*)(ssize_t))&Magick::Geometry::xOff) 
    .def("xOff", (ssize_t (Magick::Geometry::*)() const)&Magick::Geometry::xOff) 
17

Per scoprire i metodi di tipo in Python:

import PythonMagick 
dir(PythonMagick.Image()) 

quindi si ottiene un output come questo:

['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__instance_size__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'adaptiveThreshold', 'addNoise', 'adjoin', 'affineTransform', 'animationDelay', 'animationIterations', 'annotate', 'antiAlias', 'attribute', 'backgroundColor', 'backgroundTexture', 'baseColumns', 'baseFilename', 'baseRows', 'blur', 'border', 'borderColor', 'boundingBox', 'boxColor', 'cacheThreshold', 'channel', 'channelDepth', 'charcoal', 'chop', 'chromaBluePrimary', 'chromaGreenPrimary', 'chromaRedPrimary', 'chromaWhitePoint', 'classType', 'clipMask', 'colorFuzz', 'colorMap', 'colorMapSize', 'colorSpace', 'colorize', 'columns', 'comment', 'compare', 'compose', 'composite', 'compressType', 'contrast', 'convolve', 'crop', 'cycleColormap', 'debug', 'defineSet', 'defineValue', 'density', 'depth', 'despeckle', 'directory', 'display', 'draw', 'edge', 'emboss', 'endian', 'enhance', 'equalize', 'erase', 'fileName', 'fileSize', 'fillColor', 'fillPattern', 'fillRule', 'filterType', 'flip', 'floodFillColor', 'floodFillOpacity', 'floodFillTexture', 'flop', 'font', 'fontPointsize', 'fontTypeMetrics', 'format', 'frame', 'gamma', 'gaussianBlur', 'geometry', 'gifDisposeMethod', 'iccColorProfile', 'implode', 'interlaceType', 'iptcProfile', 'isValid', 'label', 'lineWidth', 'magick', 'magnify', 'map', 'matte', 'matteColor', 'matteFloodfill', 'meanErrorPerPixel', 'medianFilter', 'minify', 'modifyImage', 'modulate', 'modulusDepth', 'monochrome', 'montageGeometry', 'negate', 'normalize', 'normalizedMaxError', 'normalizedMeanError', 'oilPaint', 'opacity', 'opaque', 'page', 'penColor', 'penTexture', 'ping', 'pixelColor', 'process', 'profile', 'quality', 'quantize', 'quantizeColorSpace', 'quantizeColors', 'quantizeDither', 'quantizeTreeDepth', 'raise', 'read', 'readPixels', 'reduceNoise', 'registerId', 'renderingIntent', 'resolutionUnits', 'roll', 'rotate', 'rows', 'sample', 'scale', 'scene', 'segment', 'shade', 'sharpen', 'shave', 'shear', 'signature', 'size', 'solarize', 'spread', 'statistics', 'stegano', 'stereo', 'strokeAntiAlias', 'strokeColor', 'strokeDashOffset', 'strokeLineCap', 'strokeLineJoin', 'strokeMiterLimit', 'strokePattern', 'strokeWidth', 'subImage', 'subRange', 'swirl', 'syncPixels', 'textEncoding', 'texture', 'threshold', 'throwImageException', 'tileName', 'totalColors', 'transform', 'transformOrigin', 'transformReset', 'transformRotation', 'transformScale', 'transformSkewX', 'transformSkewY', 'transparent', 'trim', 'type', 'unregisterId', 'unsharpmask', 'verbose', 'view', 'wave', 'write', 'writePixels', 'x11Display', 'xResolution', 'yResolution', 'zoom']

16

Da quello che posso dire, PythonMagick avvolge il Magick++ library. Sono stato in grado di copiare e incollare codice C++ usando questa libreria in python e funziona come previsto. Inoltre i nomi delle classi e delle funzioni membro corrispondono (dove MagickWand sembra essere completamente diverso).

import PythonMagick as Magick 
    img = Magick.Image("testIn.jpg") 
    img.quality(100) #full compression 
    img.magick('PNG') 
    img.write("testOut.png") 
0

Per chi sta ancora cercando di trovare la documentazione di PythonMagick, PythonMagick è esattamente lo stesso di Magick ++ (API per C++). here è la documentazione di Magick ++. Per alcuni parametri specifici, dovrai trovare il tipo quindi l'elenco (ad esempio gravity-> PythonMagick.GravityType.thegravityyouwant)