diff --git a/src/Intervention/Image/ImageManager.php b/src/Intervention/Image/ImageManager.php index a5df0540..205d17f0 100644 --- a/src/Intervention/Image/ImageManager.php +++ b/src/Intervention/Image/ImageManager.php @@ -100,15 +100,25 @@ class ImageManager */ private function createDriver() { - $drivername = ucfirst($this->config['driver']); - $driverclass = sprintf('Intervention\\Image\\%s\\Driver', $drivername); + if (is_string($this->config['driver'])) { + $drivername = ucfirst($this->config['driver']); + $driverclass = sprintf('Intervention\\Image\\%s\\Driver', $drivername); - if (class_exists($driverclass)) { - return new $driverclass; + if (class_exists($driverclass)) { + return new $driverclass; + } + + throw new \Intervention\Image\Exception\NotSupportedException( + "Driver ({$drivername}) could not be instantiated." + ); + } + + if ($this->config['driver'] instanceof AbstractDriver) { + return $this->config['driver']; } throw new \Intervention\Image\Exception\NotSupportedException( - "Driver ({$drivername}) could not be instantiated." + "Unknown driver type." ); } diff --git a/tests/ImageManagerTest.php b/tests/ImageManagerTest.php index d28d0c4c..e23d9127 100644 --- a/tests/ImageManagerTest.php +++ b/tests/ImageManagerTest.php @@ -26,4 +26,14 @@ class ImageManagerTest extends PHPUnit_Framework_TestCase $this->assertEquals('foo', $manager->config['driver']); $this->assertEquals('baz', $manager->config['bar']); } + + public function testConfigureObject() + { + $config = array('driver' => new Intervention\Image\Imagick\Driver()); + $manager = new ImageManager($config); + + $image = $manager->make('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'); + $this->assertInstanceOf('Intervention\Image\Image', $image); + $this->assertInstanceOf('Imagick', $image->getCore()); + } }