From b00ae906cb6e50d7fc1f739baddff255b927dc96 Mon Sep 17 00:00:00 2001 From: Oliver Vogel Date: Mon, 8 Nov 2021 16:48:34 +0000 Subject: [PATCH] ResizeModifier & FitModifier relation --- src/Drivers/Abstract/AbstractImage.php | 2 +- ...CropResizeModifier.php => FitModifier.php} | 60 +------------------ src/Drivers/Gd/Modifiers/ResizeModifier.php | 55 +++++------------ 3 files changed, 16 insertions(+), 101 deletions(-) rename src/Drivers/Gd/Modifiers/{CropResizeModifier.php => FitModifier.php} (50%) diff --git a/src/Drivers/Abstract/AbstractImage.php b/src/Drivers/Abstract/AbstractImage.php index e275881a..f734c03b 100644 --- a/src/Drivers/Abstract/AbstractImage.php +++ b/src/Drivers/Abstract/AbstractImage.php @@ -171,7 +171,7 @@ abstract class AbstractImage $size = new Size($width, $height); return $this->modify( - $this->resolveDriverClass('Modifiers\CropResizeModifier', $size, $position) + $this->resolveDriverClass('Modifiers\FitModifier', $size, $position) ); } diff --git a/src/Drivers/Gd/Modifiers/CropResizeModifier.php b/src/Drivers/Gd/Modifiers/FitModifier.php similarity index 50% rename from src/Drivers/Gd/Modifiers/CropResizeModifier.php rename to src/Drivers/Gd/Modifiers/FitModifier.php index c03c441a..2f43650c 100644 --- a/src/Drivers/Gd/Modifiers/CropResizeModifier.php +++ b/src/Drivers/Gd/Modifiers/FitModifier.php @@ -22,7 +22,7 @@ use Intervention\Image\Traits\CanResizeGeometrically; */ -class CropResizeModifier implements ModifierInterface +class FitModifier extends ResizeModifier implements ModifierInterface { use CanResizeGeometrically; @@ -67,62 +67,4 @@ class CropResizeModifier implements ModifierInterface ->toHeight($this->target->getHeight()) ->scale(); } - - /** - * Wrapper function for 'imagecopyresampled' - * - * @param FrameInterface $frame - * @param int $dst_x - * @param int $dst_y - * @param int $src_x - * @param int $src_y - * @param int $dst_w - * @param int $dst_h - * @param int $src_w - * @param int $src_h - * @return void - */ - protected function modify(FrameInterface $frame, SizeInterface $crop, SizeInterface $resize): void - { - // create new image - $modified = imagecreatetruecolor( - $resize->getWidth(), - $resize->getHeight() - ); - - // get current image - $gd = $frame->getCore(); - - // preserve transparency - $transIndex = imagecolortransparent($gd); - - if ($transIndex != -1) { - $rgba = imagecolorsforindex($modified, $transIndex); - $transColor = imagecolorallocatealpha($modified, $rgba['red'], $rgba['green'], $rgba['blue'], 127); - imagefill($modified, 0, 0, $transColor); - imagecolortransparent($modified, $transColor); - } else { - imagealphablending($modified, false); - imagesavealpha($modified, true); - } - - // copy content from resource - $result = imagecopyresampled( - $modified, - $gd, - $resize->getPivot()->getX(), - $resize->getPivot()->getY(), - $crop->getPivot()->getX(), - $crop->getPivot()->getY(), - $resize->getWidth(), - $resize->getHeight(), - $crop->getWidth(), - $crop->getHeight() - ); - - imagedestroy($gd); - - // set new content as recource - $frame->setCore($modified); - } } diff --git a/src/Drivers/Gd/Modifiers/ResizeModifier.php b/src/Drivers/Gd/Modifiers/ResizeModifier.php index 673fe9fc..1944e9aa 100644 --- a/src/Drivers/Gd/Modifiers/ResizeModifier.php +++ b/src/Drivers/Gd/Modifiers/ResizeModifier.php @@ -9,11 +9,6 @@ use Intervention\Image\Interfaces\SizeInterface; class ResizeModifier implements ModifierInterface { - /** - * Target size - * - * @var SizeInterface - */ protected $target; public function __construct(SizeInterface $target) @@ -24,41 +19,19 @@ class ResizeModifier implements ModifierInterface public function apply(ImageInterface $image): ImageInterface { foreach ($image as $frame) { - $framesize = $frame->getSize(); - $this->modify( - $frame, - 0, - 0, - 0, - 0, - $this->target->getWidth(), - $this->target->getHeight(), - $framesize->getWidth(), - $framesize->getHeight() - ); + $this->modify($frame, $frame->getSize(), $this->target); } return $image; } - /** - * Wrapper function for 'imagecopyresampled' - * - * @param Image $image - * @param int $dst_x - * @param int $dst_y - * @param int $src_x - * @param int $src_y - * @param int $dst_w - * @param int $dst_h - * @param int $src_w - * @param int $src_h - * @return boolean - */ - protected function modify(FrameInterface $frame, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) + protected function modify(FrameInterface $frame, SizeInterface $crop, SizeInterface $resize): void { // create new image - $modified = imagecreatetruecolor($dst_w, $dst_h); + $modified = imagecreatetruecolor( + $resize->getWidth(), + $resize->getHeight() + ); // get current image $gd = $frame->getCore(); @@ -80,14 +53,14 @@ class ResizeModifier implements ModifierInterface $result = imagecopyresampled( $modified, $gd, - $dst_x, - $dst_y, - $src_x, - $src_y, - $dst_w, - $dst_h, - $src_w, - $src_h + $resize->getPivot()->getX(), + $resize->getPivot()->getY(), + $crop->getPivot()->getX(), + $crop->getPivot()->getY(), + $resize->getWidth(), + $resize->getHeight(), + $crop->getWidth(), + $crop->getHeight() ); imagedestroy($gd);