The Imagine plugin

The Imagine plugin for CakePHP, which has been available from the CakeDC account on GitHub, was written as a separate plugin, but complementary to my FileStorage plugin.

In the past, the good old CakePHP 1.3 times, we’ve had our Media plugin at the CakeDC which we never released. The main purpose of the plugin was to deal with file uploads, but only to the local system and to process images.

I’ve had to work with a few client projects that used phpthumb, which I’ve learned to dislike because it had its faults and issues. Before reinventing the wheel I simply tried to ask if somebody knows about something modern, OOP, PHP 5+, with unit tests, and had some luck.

Imagine is a modern PHP 5.3 library that provides an interface to different image processing back-ends like gd, imagick and imagick shell. Others can be implemented as well. I really recommend this lib over phpthumb, and suggest you to replace it with Imagine if your project is moving on.

The plugin for CakePHP is basically a wrapper around the Imagine library, that will autoload the library (because CakePHP 2.0 does not have it’s own autoloader until 3.0) and make it available as a behavior. The behavior provides some methods that handle commonly used image operations, like cropping and thumbnails.

Besides that, the plugin comes with a helper and a component, which allows it to generate versions of images on the fly. This was more done for backward compatibility for some apps, rather than being a concept that should be used. In fact, it is not the recommended way to handle this. I’ve written two other articles related to image processing and file storage that explain the issues with that.

Instead of creating images on the fly, which is just putting load on the server all the time, you should create the versions of an image after upload. The Imagine plugin works together with the FileStorage plugin, which can use Imagine to generate whatever images you want, right after upload.

I originally contributed this plugin, which I developed in my own free time, to CakeDC. But now, it is finally going back to my GitHub account, to pull some maintenance work away from the company. I’ll continue to maintain it, and hope you take some time to check it out, and contribute if possible.