diff --git a/src/Drivers/Gd/Encoders/PngEncoder.php b/src/Drivers/Gd/Encoders/PngEncoder.php index 64c9b270..fc52080c 100644 --- a/src/Drivers/Gd/Encoders/PngEncoder.php +++ b/src/Drivers/Gd/Encoders/PngEncoder.php @@ -4,10 +4,8 @@ namespace Intervention\Image\Drivers\Gd\Encoders; -use GdImage; use Intervention\Image\EncodedImage; use Intervention\Image\Encoders\PngEncoder as GenericPngEncoder; -use Intervention\Image\Exceptions\RuntimeException; use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\SpecializedInterface; @@ -15,30 +13,21 @@ class PngEncoder extends GenericPngEncoder implements SpecializedInterface { public function encode(ImageInterface $image): EncodedImage { - $output = $this->maybeToPalette(clone $image); // use clone because colors may be reduced + // use clone because colors may be reduced and original + // image should not be altered by encoder + $output = clone $image; - $data = $this->buffered(function () use ($output) { - imageinterlace($output, $this->interlaced); - imagesavealpha($output, true); - imagepng($output, null, -1); + if ($this->indexed) { + $output->reduceColors(256)->core()->native(); + } + + $gd = $output->core()->native(); + $data = $this->buffered(function () use ($gd) { + imageinterlace($gd, $this->interlaced); + imagesavealpha($gd, true); + imagepng($gd, null, -1); }); return new EncodedImage($data, 'image/png'); } - - /** - * Transform given image to indexed palette version according to encoder settings - * - * @param ImageInterface $image - * @throws RuntimeException - * @return GdImage - */ - private function maybeToPalette(ImageInterface $image): GdImage - { - if ($this->indexed === false) { - return $image->core()->native(); - } - - return $image->reduceColors(256)->core()->native(); - } }