Reading images

There are several ways to open images:

All of these operations are provided by the constructor of Image class.

Open an image file

The most frequently used way is just to open an image by its filename. Image‘s constructor can take the parameter named filename:

from wand.image import Image

with Image(filename='pikachu.png') as img:
    print 'width =', img.width
    print 'height =', img.height

Note

It must be passed by keyword argument exactly. Because the constructor has many parameters that are exclusive to each other.

There is a keyword argument named file as well, but don’t confuse it with filename. While filename takes a string of a filename, file takes a input stream (file-like object).

Read a input stream

If an image to open cannot be located by a filename but can be read through input stream interface (e.g. opened by os.popen(), contained in StringIO, read by urllib2.urlopen()), it can be read by Image constructor’s file parameter. It takes all file-like objects which implements read() method:

from urllib2 import urlopen
from wand.image import Image

response = urlopen('https://stylesha.re/minhee/29998/images/100x100')
try:
    with Image(file=response) as img:
        print 'format =', img.format
        print 'size =', img.size
finally:
    response.close()

In the above example code, response object returned by urlopen() function has read() method, so it also can be used as an input stream for a downloaded image.

Read a blob

If you have just a binary string (str) of the image, you can pass it into Image constructor’s blob parameter to read:

from wand.image import Image

with open('pikachu.png') as f:
    image_binary = f.read()

with Image(blob=image_binary) as img:
    print 'width =', img.width
    print 'height =', img.height

It is a way of the lowest level to read an image. There will probably not be many cases to use it.

Clone an image

If you have an image already and have to copy it for safe manipulation, use clone() method:

from wand.image import Image

with Image(filename='pikachu.png') as original:
    with original.clone() as converted:
        converted.format = 'png'
        # operations on a converted image...

For some operations like format converting or cropping, there are safe methods that return a new image of manipulated result like convert() or slicing operator. So the above example code can be replaced by:

from wand.image import Image

with Image(filename='pikachu.png') as original:
    with original.convert('png') as converted:
        # operations on a converted image...

Hint file format

When it’s read from a binary string or a file object, you can explicitly give the hint which indicates file format of an image to read — optional format keyword is for that:

from wand.image import Image

with Image(blob=image_binary, format='ico') as image:
    print image.format

New in version 0.2.1: The format parameter to Image constructor.

Table Of Contents

Related Topics

This Page