Using the buffer protocol
C-based Python objects have a so called "buffer interface". Python objects can expose their data for direct access without the need to copy it. The buffer protocol enables us to communicate with other Python software such as the Python Imaging Library (PIL) . We will see an example of saving a PIL image from a NumPy array.
Getting ready
Install PIL and SciPy, if necessary. Check the See Also section of this recipe for instructions.
How to do it...
First, we need a NumPy array with which to play.
Create an array from image data.
In previous chapters, we saw how to load the "Lena" sample image of Lena Soderberg. We will create an array filled with zeroes, and populate the alpha channel with the image data:
lena = scipy.misc.lena() data = numpy.zeros((lena.shape[0], lena.shape[1], 4), dtype=numpy.int8) data[:,:,3] = lena.copy()
Save the data as a PIL image.
Now, we will use the PIL API to save the data as a RGBA image:
img = Image.frombuffer("RGBA", lena.shape, data) img.save...