123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- namespace Grav\Plugin;
- require_once 'interface.php';
- /**
- * Class GDAdapter
- * @package Grav\Plugin
- */
- class GDAdapter implements ResizeAdapterInterface
- {
- private $image;
- private $target;
- private $format;
- private $quality;
- private $original_width;
- private $original_height;
- /**
- * Initiates a new GDAdapter instance
- * @param string $source - Source image path
- */
- public function __construct($source)
- {
- $size = getimagesize($source);
- $pathinfo = pathinfo($source);
- $extension = strtolower($pathinfo['extension']);
- $this->original_width = $size[0];
- $this->original_height = $size[1];
- if (preg_match('/jpe?g/', $extension)) {
- $this->image = imagecreatefromjpeg($source);
- $this->format = 'JPEG';
- } else if ($extension == 'png') {
- $this->image = imagecreatefrompng($source);
- $this->format = 'PNG';
- }
- return $this;
- }
- /**
- * Gets the image format
- * @return string - Either 'JPEG' or 'PNG'
- */
- public function getFormat()
- {
- return $this->format;
- }
- /**
- * Resizes the image to the specified dimensions
- * @param float $width
- * @param float $height
- * @return GDAdapter - Returns $this
- */
- public function resize($width, $height)
- {
- $this->target = imagecreatetruecolor($width, $height);
- $format = $this->getFormat();
- if ($format == 'PNG') {
- $transparent = imagecolorallocatealpha($this->target, 255, 255, 255, 127);
- imagealphablending($this->target, false);
- imagesavealpha($this->target, true);
- imagefilledrectangle($this->target, 0, 0, $width, $height, $transparent);
- }
- imagecopyresampled($this->target, $this->image, 0, 0, 0, 0, $width, $height, $this->original_width, $this->original_height);
- return $this;
- }
- /**
- * Sets JPEG quality of target image
- * @param int $quality
- * @return GDAdapter - Returns $this
- */
- public function setQuality($quality)
- {
- $this->quality = $quality;
- return $this;
- }
- /**
- * Generates image and saves it to disk
- * @param string $filename - Target filename for image
- * @return bool - Returns true if successful, false otherwise
- */
- public function save($filename)
- {
- $format = $this->getFormat();
- if ($format == 'JPEG') {
- $result = imagejpeg($this->target, $filename, $this->quality);
- } else if ($format == 'PNG') {
- $result = imagepng($this->target, $filename, 9);
- }
- imagedestroy($this->image);
- imagedestroy($this->target);
- return $result;
- }
- }
|