WikiFilters
Advertisement

< Code

Code of 'TutorialP2'[]

->show how to import/export from/to PIL image


import FiltersDllPy as FDP 
import Image 
import time
from ctypes import *


## convert 'PIL' image to 'Filters' image
    ## Filters image format is Little Endian (x86 / MS Windows, Linux) : BGR(A) order (0xAARRGGBB)
    ## but PIL image format is Big Endian (PPC / Linux, MaxOSX) : (A)RGB order (0xRRGGBBAA)
def createImageFromImagePIL(aImagePIL):
    result = f.CreateImage(aImagePIL.size[0], aImagePIL.size[1])
    imagePIL_RGBA = imagePIL.convert('RGBA') #make sure that the format is RGBA
    imagePIL_BGRA = Image.fromstring('RGBA', imagePIL_RGBA.size, imagePIL_RGBA.tostring(), 'raw', 'BGRA')
    s = imagePIL_BGRA.tostring()
    memmove(result[0].Bits, s, len(s))
    return result

## convert 'Filters' image to 'PIL' image
    ## Filters image format is Little Endian (x86 / MS Windows, Linux) : BGR(A) order (0xAARRGGBB)
    ## but PIL image format is Big Endian (PPC / Linux, MaxOSX) : (A)RGB order (0xRRGGBBAA)
def createImagePILFromImage(aImage):
    imageSize = aImage[0].Width, aImage[0].Height
    s = create_string_buffer(aImage[0].Width*aImage[0].Height*4)
    memmove(s, aImage[0].Bits, len(s))
    imagePIL = Image.fromstring('RGBA', imageSize, s, 'raw', 'BGRA')
    return imagePIL


f = FDP.FiltersDllPy()
f.Initialize()

#get a image in PIL format from PIL library
imagePIL = Image.open('C:/DEV/FiltersTutorial/Bin/lenna_color.bmp')
print 'imagePIL : width=[' + str(imagePIL.size[0]) +'], height=[' + str(imagePIL.size[1]) + ']'

#convert it to Filters image format
t = time.time()
fImage = createImageFromImagePIL(imagePIL)
duration = ((time.time()-t)*1000)
print 'createImageFromImagePIL duration : %3.0f' % duration + 'ms'

#use it in Filters library...

#for example we save it
print 'save fImage'
f.saveImage(fImage, 'C:/DEV/FiltersTutorial/Bin/filtersImageFromPIL.bmp')

#for example we process it with [filterCanny]
print 'process fImage to fImageCanny with filterCanny'
fImageCanny = f.CreateImageLike(fImage) 
par = (
('inImage', fImage), 
('outImage', fImageCanny), 
('threshold1', 130), 
('threshold2', 255), 
) 
filterCanny = f.createFilterRun('filterCanny', par)
print 'save fImageCanny'
#don't forget that we have provided [outImage] as a parameter,
#so it's not a image created by [filterCanny], and this filter just fill it
#then we can directly use it
f.saveImage(fImageCanny, 'C:/DEV/FiltersTutorial/Bin/filtersImageFromPIL_canny.bmp')

#now for example we can process it with [filterRotation]
print 'process fImage to fImageRotation with filterRotation'
par = (
('inImage', fImage), 
('angle', 75.0), 
('interpolationMode', 1), #basic fast
('autoAdjustSize', True), 
("missingPixelColorMode", "BLACK"), 
)
filterRotation = f.createFilterRun('filterRotation', par)
print 'save fImageRotation'
#don't forget that we DON'T provided [outImage] as a parameter
#because [filterRotation] must create it (because it calcul the correct size)
#so IT'S a image created by [filterRotation]
#then we MUST obtain it with the function [GetOutputImage]
fImageRotation = f.GetOutputImage(filterRotation, 'outImage')

#print 'fImageRotation : width=[' + str(FDP.TFBitmap32(fImageRotation).Width) +'], height=[' + str(fImageRotation.Height) + ']'
f.saveImage(fImageRotation, 'C:/DEV/FiltersTutorial/Bin/filtersImageFromPIL_rotation.bmp')

#for other example, and until a real documentation,
# you can have a look on the code of 'FiltersTest' at :
# http://filters.sourceforge.net/wikifilters/index.php/Code_of_FiltersTest

#convert it to PIL image format
t = time.time()
imagePIL = createImagePILFromImage(fImageRotation)
duration = ((time.time()-t)*1000)
print 'createImagePILFromImage duration : %3.0f' % duration + 'ms'

#use it in PIL library...
imagePIL.show()

print 'free memory'
f.FreeImage(fImage)
f.FreeImage(fImageCanny)
f.DeleteFilter(filterCanny)
f.DeleteFilter(filterRotation)

print 'press [ENTER] to finish...'
ch=raw_input()

f.UnInitialize()
Advertisement