Quite a cryptic title, but if you haven’t guessed, were talking about Images. This being a Python article that’s what we're using! If you’ve never thought about it, or -- even better -- if you didn’t know it was possible then you’re in for a nice surprise; not only can Python do this but it’s pretty good at it, too. Actually, Python works well with graphics in general, but for now we’re sticking to the 2D kind.
You're probably wondering what all the image.show() calls are about; show() just creates a temporary image and opens it. This way we can see what's happening to our image step by step!
Anyway let's just slip off topic for a second here and imagine that you're in charge of some online art gallery/community where members can upload images and have them displayed for the world to see. As part of the site's design every image has a square thumbnail that links to the full-sized image.
This really just defines a new user function named thumb() which we can then use to create our thumbnails! It starts by converting the images size to a list and sorting it in place so we have the smallest dimension at the beginning of the list (this value is then used while cropping our image). The next part then crops and resizes our image using the ANTIALIAS filter (better quality) before returning the new image.
Watermarking
Next up we're going to do some watermarking and paste a smaller graphic onto our image. Which as far as I know makes this the only example of watermarking with PIL, even though once again this is incredibly easy!
image = Image.open('sample.jpg') thumb = Image.open('thumb.jpg')
watermark(image, thumb)
image.show()
Quite proud of this for some reason; maybe because I've finally got my head around placing things where I want them on an image. Anyway what it is actually saying is that if 'thumb' is smaller than our image, then put it 10 pixels in from the bottom right hand corner of 'image' (since it would look pretty messed up in most cases otherwise).