| <?php |
|
|
| namespace Kanboard\Core; |
|
|
| |
| |
| |
| |
| |
| |
| class Thumbnail |
| { |
| protected $compression = -1; |
| protected $metadata = array(); |
| protected $srcImage; |
| protected $dstImage; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public static function createFromFile($filename) |
| { |
| $self = new static(); |
| $self->fromFile($filename); |
| return $self; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public static function createFromString($blob) |
| { |
| $self = new static(); |
| $self->fromString($blob); |
| return $self; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function fromFile($filename) |
| { |
| $this->metadata = getimagesize($filename); |
| $this->srcImage = imagecreatefromstring(file_get_contents($filename)); |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function fromString($blob) |
| { |
| if (!function_exists('getimagesizefromstring')) { |
| $uri = 'data://application/octet-stream;base64,' . base64_encode($blob); |
| $this->metadata = getimagesize($uri); |
| } else { |
| $this->metadata = getimagesizefromstring($blob); |
| } |
|
|
| $this->srcImage = imagecreatefromstring($blob); |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function resize($width = 250, $height = 100) |
| { |
| $srcWidth = $this->metadata[0]; |
| $srcHeight = $this->metadata[1]; |
| $dstX = 0; |
| $dstY = 0; |
|
|
| if ($width == 0 && $height == 0) { |
| $width = 100; |
| $height = 100; |
| } |
|
|
| if ($width > 0 && $height == 0) { |
| $dstWidth = $width; |
| $dstHeight = floor($srcHeight * ($width / $srcWidth)); |
| $this->dstImage = imagecreatetruecolor($dstWidth, $dstHeight); |
| } elseif ($width == 0 && $height > 0) { |
| $dstWidth = floor($srcWidth * ($height / $srcHeight)); |
| $dstHeight = $height; |
| $this->dstImage = imagecreatetruecolor($dstWidth, $dstHeight); |
| } else { |
| $srcRatio = $srcWidth / $srcHeight; |
| $resizeRatio = $width / $height; |
|
|
| if ($srcRatio <= $resizeRatio) { |
| $dstWidth = $width; |
| $dstHeight = floor($srcHeight * ($width / $srcWidth)); |
| $dstY = ($dstHeight - $height) / 2 * (-1); |
| } else { |
| $dstWidth = floor($srcWidth * ($height / $srcHeight)); |
| $dstHeight = $height; |
| $dstX = ($dstWidth - $width) / 2 * (-1); |
| } |
|
|
| $this->dstImage = imagecreatetruecolor($width, $height); |
| } |
|
|
| imagealphablending($this->dstImage, false); |
| imagesavealpha($this->dstImage, true); |
|
|
| imagecopyresampled($this->dstImage, $this->srcImage, (int) $dstX, (int) $dstY, 0, 0, (int) $dstWidth, (int) $dstHeight, (int) $srcWidth, (int) $srcHeight); |
|
|
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function toFile($filename) |
| { |
| imagepng($this->dstImage, $filename, $this->compression); |
| imagedestroy($this->dstImage); |
| imagedestroy($this->srcImage); |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function toString() |
| { |
| ob_start(); |
| imagepng($this->dstImage, null, $this->compression); |
| imagedestroy($this->dstImage); |
| imagedestroy($this->srcImage); |
| return ob_get_clean(); |
| } |
|
|
| |
| |
| |
| |
| |
| public function toOutput() |
| { |
| imagepng($this->dstImage, null, $this->compression); |
| imagedestroy($this->dstImage); |
| imagedestroy($this->srcImage); |
| } |
| } |
|
|