Skip to content

Commit

Permalink
Fix interlacing
Browse files Browse the repository at this point in the history
  • Loading branch information
ADmad committed Jan 30, 2024
1 parent bcb3168 commit ad5a309
Showing 1 changed file with 24 additions and 15 deletions.
39 changes: 24 additions & 15 deletions src/Manipulators/Encode.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Intervention\Image\Drivers\Gd\Driver as GdDriver;
use Intervention\Image\Drivers\Imagick\Driver as ImagickDriver;
use Intervention\Image\ImageManager;
use Intervention\Image\Interfaces\DriverInterface;
use Intervention\Image\Interfaces\ImageInterface;

class Encode extends BaseManipulator
Expand All @@ -21,30 +22,25 @@ public function run(ImageInterface $image): ImageInterface
$format = $this->getFormat($image);
$quality = $this->getQuality();
$driver = $image->driver();

if (in_array($format, ['jpg', 'pjpg'], true)) {
$image = (new ImageManager($driver))
->create($image->width(), $image->height())
->fill('ffffff')
->place($image, 'top-left', 0, 0);
}
$shouldInterlace = false;

if (in_array($format, ['png', 'pjpg'], true)) {
$i = $image->core()->native();
if ($driver instanceof ImagickDriver) {
$i->setInterlaceScheme(3); // 3 = Imagick::INTERLACE_PLANE constant
} elseif ($driver instanceof GdDriver) {
imageinterlace($i, true);
}
$shouldInterlace = true;

if ('pjpg' === $format) {
$format = 'jpg';
}
}

return (new ImageManager($driver))->read(
$image->encodeByExtension($format, $quality)->toFilePointer()
$image = (new ImageManager($driver))->read(
$image->encodeByExtension($format, $quality)->toString()
);

if ($shouldInterlace) {
$image = $this->interlace($image, $driver);
}

return $image;
}

/**
Expand Down Expand Up @@ -104,4 +100,17 @@ public function getQuality(): int

return (int) $q;
}

protected function interlace(ImageInterface $image, DriverInterface $driver): ImageInterface
{
$img = $image->core()->native();

if ($driver instanceof ImagickDriver) {
$img->setInterlaceScheme(3); // 3 = Imagick::INTERLACE_PLANE constant

Check warning on line 109 in src/Manipulators/Encode.php

View check run for this annotation

Codecov / codecov/patch

src/Manipulators/Encode.php#L109

Added line #L109 was not covered by tests
} elseif ($driver instanceof GdDriver) {
imageinterlace($img, true);
}

return $image;
}
}

0 comments on commit ad5a309

Please sign in to comment.