| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- <?php
- namespace Intervention\Image;
- abstract class AbstractEncoder
- {
- /**
- * Buffer of encode result data
- *
- * @var string
- */
- public $result;
- /**
- * Image object to encode
- *
- * @var Image
- */
- public $image;
- /**
- * Output format of encoder instance
- *
- * @var string
- */
- public $format;
- /**
- * Output quality of encoder instance
- *
- * @var integer
- */
- public $quality;
-
- /**
- * Processes and returns encoded image as JPEG string
- *
- * @return string
- */
- abstract protected function processJpeg();
- /**
- * Processes and returns encoded image as PNG string
- *
- * @return string
- */
- abstract protected function processPng();
- /**
- * Processes and returns encoded image as GIF string
- *
- * @return string
- */
- abstract protected function processGif();
- /**
- * Processes and returns encoded image as TIFF string
- *
- * @return string
- */
- abstract protected function processTiff();
- /**
- * Processes and returns encoded image as BMP string
- *
- * @return string
- */
- abstract protected function processBmp();
- /**
- * Processes and returns encoded image as ICO string
- *
- * @return string
- */
- abstract protected function processIco();
- /**
- * Process a given image
- *
- * @param Image $image
- * @param string $format
- * @param integer $quality
- * @return Image
- */
- public function process(Image $image, $format = null, $quality = null)
- {
- $this->setImage($image);
- $this->setFormat($format);
- $this->setQuality($quality);
- switch (strtolower($this->format)) {
- case 'data-url':
- $this->result = $this->processDataUrl();
- break;
- case 'gif':
- case 'image/gif':
- $this->result = $this->processGif();
- break;
- case 'png':
- case 'image/png':
- case 'image/x-png':
- $this->result = $this->processPng();
- break;
- case 'jpg':
- case 'jpeg':
- case 'image/jpg':
- case 'image/jpeg':
- case 'image/pjpeg':
- $this->result = $this->processJpeg();
- break;
- case 'tif':
- case 'tiff':
- case 'image/tiff':
- case 'image/tif':
- case 'image/x-tif':
- case 'image/x-tiff':
- $this->result = $this->processTiff();
- break;
- case 'bmp':
- case 'image/bmp':
- case 'image/ms-bmp':
- case 'image/x-bitmap':
- case 'image/x-bmp':
- case 'image/x-ms-bmp':
- case 'image/x-win-bitmap':
- case 'image/x-windows-bmp':
- case 'image/x-xbitmap':
- $this->result = $this->processBmp();
- break;
- case 'ico':
- case 'image/x-ico':
- case 'image/x-icon':
- case 'image/vnd.microsoft.icon':
- $this->result = $this->processIco();
- break;
- case 'psd':
- case 'image/vnd.adobe.photoshop':
- $this->result = $this->processPsd();
- break;
-
- default:
- throw new \Intervention\Image\Exception\NotSupportedException(
- "Encoding format ({$format}) is not supported."
- );
- }
- $this->setImage(null);
- return $image->setEncoded($this->result);
- }
- /**
- * Processes and returns encoded image as data-url string
- *
- * @return string
- */
- protected function processDataUrl()
- {
- $mime = $this->image->mime ? $this->image->mime : 'image/png';
- return sprintf('data:%s;base64,%s',
- $mime,
- base64_encode($this->process($this->image, $mime, $this->quality))
- );
- }
- /**
- * Sets image to process
- *
- * @param Image $image
- */
- protected function setImage($image)
- {
- $this->image = $image;
- }
- /**
- * Determines output format
- *
- * @param string $format
- */
- protected function setFormat($format = null)
- {
- if ($format == '' && $this->image instanceof Image) {
- $format = $this->image->mime;
- }
- $this->format = $format ? $format : 'jpg';
- return $this;
- }
- /**
- * Determines output quality
- *
- * @param integer $quality
- */
- protected function setQuality($quality)
- {
- $quality = is_null($quality) ? 90 : $quality;
- $quality = $quality === 0 ? 1 : $quality;
- if ($quality < 0 || $quality > 100) {
- throw new \Intervention\Image\Exception\InvalidArgumentException(
- 'Quality must range from 0 to 100.'
- );
- }
- $this->quality = intval($quality);
- return $this;
- }
- }
|