# Working with TIFFs (import, export) in Python using numpy

### Question

I need a python routine that can open and import TIFF images into numpy arrays, so I can analyze and modify the contained data and afterwards save them as TIFFs again. (They are basically light intensity maps in greyscale, representing the respective values per pixel)

I tried to find something, but there is no documentation on PIL methods concerning TIFF. I tried to figure it out, but only got bad mode/ file type not supported errors.

What do I need to use here?

1
61
5/29/2014 7:02:41 AM

First, I downloaded a test TIFF image from this page called `a_image.tif`. Then I opened with PIL like this:

``````>>> from PIL import Image
>>> im = Image.open('a_image.tif')
>>> im.show()
``````

This showed the rainbow image. To convert to a numpy array, it's as simple as:

``````>>> import numpy
>>> imarray = numpy.array(im)
``````

We can see that the size of the image and the shape of the array match up:

``````>>> imarray.shape
(44, 330)
>>> im.size
(330, 44)
``````

And the array contains `uint8` values:

``````>>> imarray
array([[  0,   1,   2, ..., 244, 245, 246],
[  0,   1,   2, ..., 244, 245, 246],
[  0,   1,   2, ..., 244, 245, 246],
...,
[  0,   1,   2, ..., 244, 245, 246],
[  0,   1,   2, ..., 244, 245, 246],
[  0,   1,   2, ..., 244, 245, 246]], dtype=uint8)
``````

Once you're done modifying the array, you can turn it back into a PIL image like this:

``````>>> Image.fromarray(imarray)
<Image.Image image mode=L size=330x44 at 0x2786518>
``````
80
9/23/2014 5:46:45 PM

I use matplotlib for reading TIFF files:

``````import matplotlib.pyplot as plt
and `I` will be of type `ndarray`.
There's also a `plt.imsave` function for saving.