d1a8lo24
d1a8lo24

Reputation: 71

How to implement Imagine image library in Codeigniter

I am trying to add the Imagine image library into a Codeigniter application, but this is the first time I have ever encounter the "namespace" and "use" concept which I just don't get. Most Libs usually need an include, require etc... to make them work with your framework but I am having a hard time trying to implement this "namespace", "use" approach.

Now how far did I get, well I downloaded the Lib, put the Imagine folder in my libraries folder in CI where I have another image Lib call wideimage which I had no problem adapting to CI. I try to be creative and and loaded the library files just like any regular library file is loaded in CI.

And thats where the problem began, I started getting a lot of errors like class is not found got the error line and right away I thought it may need that other file that has that class now that work for some of the errors that it kept on giving me but its like every time a new lib file is loaded another error comes up and some errors just won't go away even if the file with the main class is present.

Now I did found an article on how to set an SPL auto load and I got the following code

set_include_path('/application/libraries/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');

But never got it to work, in this case it gave me an error of CI classes or files where not being found.

Now again to my questions is there a way to implemet this Imagine image library into Codeigniter?

To either load it through the regular library loader or through an autoload file?

Something like this;

class Test extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->library('imagine');
    }

    public function index()
    {
        // Do some cool things with the image lib functions
    }   
}

Well I would really appreciate anyone's help on this in the mean time I will keep on looking around the web to see if I can find an answer.

Upvotes: 1

Views: 1279

Answers (1)

d1a8lo24
d1a8lo24

Reputation: 71

Anyway after a day of looking I finally found a way to do it, and thank you simplepie feed parser I knew I had seen similar code in the past.

Anyway I actually looked over at the simplepie autoloader.php file which loads the classes to use simplepie and I just did some small adjustments to the code to be able to use Imagine Lib in Codeigniter.

So here are the steps and code:

1 download the Imagine Library at: https://github.com/avalanche123/Imagine

2 Copy the Imagine folder into your CI application libraries folder: application/libraries

3 Create a file and call it imagine_autoload.php

4 add the following code to the imagine_autoload.php file

set_include_path('/application/libraries/Imagine' . PATH_SEPARATOR . get_include_path());

function imagineLoader($class) {
    $path = $class;
    $path = str_replace('\\', DIRECTORY_SEPARATOR, $path) . '.php';
    if (strpos($class, 'Imagine') !== 0)
    {
        return;
    }
    include_once $path;
}

spl_autoload_register('\imagineLoader');

Now to the fun part on your controller do the following:

    require_once('./application/libraries/imagine_autoloader.php');
    // Here you can use the imagine imagine tools
    use Imagine\Image\Box;
    use Imagine\Image\Point;

    class Testing extends CI_Controller {

    function __construct()
    {
        parent::__construct();
    }

    function index($offset = 0)
    {    
        $imagine = new \Imagine\Gd\Imagine();

        $image = $imagine->open('/path/to/image.jpg');
        $thumbnail = $image->thumbnail(new Imagine\Image\Box(100, 100));
        $thumbnail->save('/path/to/thumnail_image.jpg');
    }
}

Now go an look at where you saved the new image and you will find a new image that has been re size.

Hopefully someone will find this useful.

Upvotes: 3

Related Questions