| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- <?php
- namespace Intervention\Image\Imagick;
- use Intervention\Image\Image;
- class Decoder extends \Intervention\Image\AbstractDecoder
- {
- /**
- * Initiates new image from path in filesystem
- *
- * @param string $path
- * @return \Intervention\Image\Image
- */
- public function initFromPath($path)
- {
- $core = new \Imagick;
- try {
- $core->setBackgroundColor(new \ImagickPixel('transparent'));
- $core->readImage($path);
- $core->setImageType(defined('\Imagick::IMGTYPE_TRUECOLORMATTE') ? \Imagick::IMGTYPE_TRUECOLORMATTE : \Imagick::IMGTYPE_TRUECOLORALPHA);
- } catch (\ImagickException $e) {
- throw new \Intervention\Image\Exception\NotReadableException(
- "Unable to read image from path ({$path}).",
- 0,
- $e
- );
- }
- // build image
- $image = $this->initFromImagick($core);
- $image->setFileInfoFromPath($path);
- return $image;
- }
- /**
- * Initiates new image from GD resource
- *
- * @param Resource $resource
- * @return \Intervention\Image\Image
- */
- public function initFromGdResource($resource)
- {
- throw new \Intervention\Image\Exception\NotSupportedException(
- 'Imagick driver is unable to init from GD resource.'
- );
- }
- /**
- * Initiates new image from Imagick object
- *
- * @param Imagick $object
- * @return \Intervention\Image\Image
- */
- public function initFromImagick(\Imagick $object)
- {
- // currently animations are not supported
- // so all images are turned into static
- $object = $this->removeAnimation($object);
- // reset image orientation
- $object->setImageOrientation(\Imagick::ORIENTATION_UNDEFINED);
- return new Image(new Driver, $object);
- }
- /**
- * Initiates new image from binary data
- *
- * @param string $data
- * @return \Intervention\Image\Image
- */
- public function initFromBinary($binary)
- {
- $core = new \Imagick;
- try {
- $core->readImageBlob($binary);
- } catch (\ImagickException $e) {
- throw new \Intervention\Image\Exception\NotReadableException(
- "Unable to read image from binary data.",
- 0,
- $e
- );
- }
- // build image
- $image = $this->initFromImagick($core);
- $image->mime = finfo_buffer(finfo_open(FILEINFO_MIME_TYPE), $binary);
- return $image;
- }
- /**
- * Turns object into one frame Imagick object
- * by removing all frames except first
- *
- * @param Imagick $object
- * @return Imagick
- */
- private function removeAnimation(\Imagick $object)
- {
- $imagick = new \Imagick;
- foreach ($object as $frame) {
- $imagick->addImage($frame->getImage());
- break;
- }
- $object->destroy();
- return $imagick;
- }
- }
|