Альтернатива для библиотеки PHP GD в Python - PullRequest
3 голосов
/ 15 октября 2010

Я искал pure python module, который имеет функциональность, эквивалентную библиотеке PHP GD. Мне нужно написать текст в файл изображения. Я знаю, что библиотека PHP GD может это сделать. Кто-нибудь тоже знает о таком модуле в python.

Ответы [ 2 ]

6 голосов
/ 15 октября 2010

Да: Библиотека изображений Python или PIL.Он используется большинством приложений Python, которые должны обрабатывать изображения.

1 голос
/ 21 апреля 2013

Так как вы ищете «чистые модули Python», PIL может быть не в порядке.Альтернативы PIL:

  • mahotas .Это не чисто, но это зависит только от NumPy, который является довольно стандартнымиз Python с использованием ctypes:

    Python 3 / Python 2 (также работает в 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()
    

    Источник: http://www.langarson.com.au/code/testPixelOps/testPixelOps.py (Python 2)

...