2010-10-15 4 views
3

Je cherchais un pure python module qui a des fonctionnalités équivalentes à la bibliothèque PHP GD. J'ai besoin d'écrire du texte sur un fichier image. Je sais que la bibliothèque PHP GD peut le faire. Est-ce que quelqu'un sait à propos de ce module en python aussi.Alternative pour la bibliothèque PHP GD en python

Répondre

6

Oui: le Python Imaging Library ou PIL. Il est utilisé par la plupart des applications Python qui ont besoin de faire du traitement d'image.

+0

J'ai utilisé PIL pour exactement ce que @Idlecool demande. – nmichaels

+0

est-ce un pur module python .. je peux voir les fichiers c à l'intérieur .. –

+1

Non - c'est un module C compilé. Cela signifie entre autres que cela ne marchera pas avec des choses comme Jython ou IronPython, mais c'est beaucoup plus rapide qu'une simple implémentation Python. –

1

Puisque vous êtes à la recherche de "modules Python purs", PIL n'est peut-être pas OK. Alternatives à PIL:

  • mahotas. Ce n'est pas pur, mais cela dépend seulement de numpy, ce qui est plutôt standard.
  • FreeImagePy, une enveloppe ctypes pour FreeImage

Vous pouvez également utiliser GD directement à partir de Python en utilisant ctypes:

Python 3/Python 2 (fonctionne également PyPy):

#!/bin/env python3 
import ctypes 

gd = ctypes.cdll.LoadLibrary('libgd.so.2') 
libc = ctypes.cdll.LoadLibrary('libc.so.6') 

## Setup required 'interface' to GD via ctypes 
## Determine pointer size for 32/64 bit platforms : 
pointerSize = ctypes.sizeof(ctypes.c_void_p())*8 
if pointerSize == 64: 
    pointerType = ctypes.c_int64 
else: 
    pointerType = ctypes.c_int32 

## Structure for main image pointer 
class gdImage(ctypes.Structure): 
    ''' Incomplete definition, based on the start of : http://www.boutell.com/gd/manual2.0.33.html#gdImage ''' 
    _fields_ = [ 
     ("pixels", pointerType, pointerSize), 
     ("sx", ctypes.c_int, 32), 
     ("sy", ctypes.c_int, 32), 
     ("colorsTotal", ctypes.c_int, 32), 
     ## ... more fields to be added here. 
     ] 
gdImagePtr = ctypes.POINTER(gdImage) 
gd.gdImageCreateTrueColor.restype = gdImagePtr 

def gdSave(img, filename): 
    ''' Simple method to save a gd image, and destroy it. ''' 

    fp = libc.fopen(ctypes.c_char_p(filename.encode("utf-8")), "w") 
    gd.gdImagePng(img, fp) 
    gd.gdImageDestroy(img) 
    libc.fclose(fp) 

def test(size=256): 
    ## Common test parameters : 
    outputSize = (size,size) 
    colour = (100,255,50) 
    colourI = (colour[0]<<16) + (colour[1]<<8) + colour[2] ## gd Raw 

    ## Test using GD completely via ctypes : 
    img = gd.gdImageCreateTrueColor(outputSize[0], outputSize[1]) 
    for x in range(outputSize[0]): 
     for y in range(outputSize[1]): 
      gd.gdImageSetPixel(img, x, y, colourI) 
    gdSave(img, 'test.gd.gdImageSetPixel.png') 

if __name__ == "__main__": 
    test() 

Source: http://www.langarson.com.au/code/testPixelOps/testPixelOps.py (Python 2)

Questions connexes