Image Processing with Imagine
Image processing in PHP is a necessary evil but is needed more often than not in just about every web application. With the various preferences in image processing libraries (think ImageMagick, GraphicsMagick and GD) it is difficult to find a library that provides a unified object oriented interface as well as implementing the general tasks in a simplistic fashion.
What is Imagine?
Imagine is an open source image manipulation library built with PHP 5.3 that implements an object oriented interface to ImageMagick, GraphicsMagick and GD. It provides functionality for both common image manipulation and drawing tasks. Instead of rewriting the same code to create a thumbnail, crop, rotate, resize, flip or even creating a composite image, Imagine provides a single line method to solve these tasks.
Getting Started
To get started, simply download and extract the library or take a checkout with Git. Setup a simple autoloader through spl_autoload and start to make use of the library!
Setup of SPL Autoload
SPL autoload utilizing namespaces can be a bit tricky for those of you that have not done it yet. However, once you set this up you will be happy that you do not need to worry about including all of the right files.
set_include_path('/path/to/lib/Imagine' . PATH_SEPARATOR . get_include_path()); function imagineLoader($class) { $path = $class; $path = str_replace('\\', DIRECTORY_SEPARATOR, $path) . '.php'; if (file_exists($path)) { include $path; } } spl_autoload_register('\imagineLoader');
Our Example with Thumbnails
Thumbnails are a vital part of any application that is utilizing photos for both bandwidth purposes and to save the user the agony of having to load up large photos. They should generally always keep their proportions and Imagine makes this easier than pie.
$imagine = new \Imagine\Gd\Imagine(); $image = $imagine->open('example.png'); $thumbnail = $image->thumbnail(new Imagine\Image\Box(100, 100)); $thumbnail->save('example.thumb.png');
Now, that was easy!
Conclusion
Imagine is a great tool for speeding up your development when working with images. We only looked at a very basic example but take a look at the documentation to find far more complex examples.
Leave a comment
Use the form below to leave a comment:
Responses and Pingbacks
March 7th, 2011 at 7:14 am
Well … apart from the fact that the call to file_exists() is useless, that it should have been include_once rather than include, let aside that it should have been “/path/to/lib/Imagine” instead of “/path/to/lib” and that method thumbnail() does NOT expect a target width and target height, it really was easy …
March 7th, 2011 at 8:02 pm
Hi, thanks for posting this!
The syntax for making specifying sizes is a little different now, basically its $image->thumbnail(new Imagine\Image\Box(100, 100));
Keep it up!
March 7th, 2011 at 8:44 pm
Man, you move fast. I’ve been keeping up, but wow, refactoring has been moving
Time to update my local changes… might need to start thinking about having releases with minor + major releases.
March 11th, 2011 at 11:52 am
[…] Image Processing with Imagine « php|architect – The site for PHP professionals […]
March 23rd, 2011 at 4:43 am
The article was very interesting.. Can we create a thumbnail image for uploaded pdf file using Imagine? or do we need any other library?
June 23rd, 2011 at 3:05 am
Hi. Nice…? WTF? noo, this is awesome! 😀 I have the feeling that people involved with Symfony[2] are very skilled. This utility is very intuitive and well done. A lot better than any other image manipulation php lib. Namespace, POO, internals (like file permission, awesome!).
September 16th, 2015 at 8:31 am
Thank you so much for showing me spl_autoload. Until that point i had no idea how to get these classes working. Shame their own documentation simple says – use composer. Well, what if i don’t want to use composer?
You’ve helped me no end, thank you.
February 24th, 2016 at 8:55 pm
I am sorry, I copied the spl_autoloader code exactly as given, but can’t get it working!
The ImagineFiles is in the subfolder Imagine/
so I have : set_include_path(‘Imagine/lib/Imagine’ . PATH_SEPARATOR . get_include_path());
But always get the error message for the “$imagine = new \Imagine\Gd\Imagine();” line : Class ‘Imagine\Gd\Imagine’ not found