software pythonmagick mac convert python imagemagick image-manipulation ctypes

pythonmagick - imagemagick windows 7



¿Puedo acceder a la API de ImageMagick con Python? (3)

Necesito usar ImageMagick ya que PIL no tiene la cantidad de funcionalidad de imagen disponible que estoy buscando. Sin embargo, quiero usar Python.

Las vinculaciones de Python (PythonMagick) no se han actualizado desde 2009. Lo único que he podido encontrar son llamadas al sistema os.system para usar la interfaz de línea de comandos, pero esto parece torpe.

¿Hay alguna manera de acceder a la API directamente utilizando ctypes y conversiones de algún tipo? Como último recurso, ¿hay alguna otra biblioteca que tenga la gran cantidad de herramientas de edición de imágenes como ImageMagick que he revisado?


Esto me ha funcionado para el siguiente comando para crear una imagen a partir del texto de la letra "P":

import subprocess cmd = ''/usr/local/bin/convert -size 30x40 xc:white -fill white -fill black -font Arial -pointsize 40 -gravity South -draw "text 0,0 /'P/'" /Users/fred/desktop/draw_text2.gif'' subprocess.call(cmd, shell=True)


No encontré ninguna buena vinculación de Python para ImageMagick, así que para usar ImageMagick en el programa Python tuve que usar el módulo de subprocess para redirigir la entrada / salida.

Por ejemplo, supongamos que necesitamos convertir un archivo PDF a TIF:

path = "/path/to/some.pdf" cmd = ["convert", "-monochrome", "-compress", "lzw", path, "tif:-"] fconvert = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = fconvert.communicate() assert fconvert.returncode == 0, stderr # now stdout is TIF image. let''s load it with OpenCV filebytes = numpy.asarray(bytearray(stdout), dtype=numpy.uint8) image = cv2.imdecode(filebytes, cv2.IMREAD_GRAYSCALE)

Aquí utilicé tif:- decirle a la utilidad de línea de comandos de ImageMagick que quiero obtener una imagen TIF como transmisión estándar. De la misma manera, puede decirle que use stdin stream como entrada especificando - como nombre de archivo de entrada.


Yo recomendaría usar Wand (explicaciones a continuación).

Estaba buscando el enlace adecuado a la biblioteca de ImageMagick, que:

  • error de trabajo / problema libre
  • mantenerse regularmente y actualizado
  • permitir un buen objetivo Python

Pero, de hecho, la API de Python (vinculante) tiene demasiadas versiones diferentes (en su mayoría descontinuadas). Después de leer una buena reseña histórica de Benjamin Schweizer, todo quedó claro (también vea su wiki de github ) :

  • GraphicsMagick
  • PythonMagick: primera implementación
  • PythonMagickWand / Achim Domma - primer Wand - una implementación de CDLL
  • PythonMagickWand / Ian Stevens
  • MagickFoo - incluido en python-magickwand
  • Wand / Hong Minhee - el último proyecto

Ahora Wand es solo una API C (reducida) para ImageMagick ".. API es la interfaz recomendada entre el lenguaje de programación C y las bibliotecas de procesamiento de imágenes ImageMagick. A diferencia de la API MagickCore C, MagickWand utiliza solo algunos tipos opacos. Los accesorios están disponibles para establecer u obtener propiedades importantes de varita ". ( Ver la página de inicio del proyecto )

Por lo tanto, ya es una interfaz simplificada que es más fácil de mantener.