Skip to content

Commit 874a11f

Browse files
authored
Merge pull request #387 from thephpleague/3.x-interlacing
Fix interlacing
2 parents bec08c7 + 10c8b36 commit 874a11f

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

src/Manipulators/Encode.php

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Intervention\Image\Drivers\Gd\Driver as GdDriver;
66
use Intervention\Image\Drivers\Imagick\Driver as ImagickDriver;
77
use Intervention\Image\ImageManager;
8+
use Intervention\Image\Interfaces\DriverInterface;
89
use Intervention\Image\Interfaces\ImageInterface;
910

1011
class Encode extends BaseManipulator
@@ -21,30 +22,23 @@ public function run(ImageInterface $image): ImageInterface
2122
$format = $this->getFormat($image);
2223
$quality = $this->getQuality();
2324
$driver = $image->driver();
25+
$interlace = false;
2426

25-
if (in_array($format, ['jpg', 'pjpg'], true)) {
26-
$image = (new ImageManager($driver))
27-
->create($image->width(), $image->height())
28-
->fill('ffffff')
29-
->place($image, 'top-left', 0, 0);
30-
}
27+
if ('pjpg' === $format) {
28+
$interlace = true;
3129

32-
if (in_array($format, ['png', 'pjpg'], true)) {
33-
$i = $image->core()->native();
34-
if ($driver instanceof ImagickDriver) {
35-
$i->setInterlaceScheme(3); // 3 = Imagick::INTERLACE_PLANE constant
36-
} elseif ($driver instanceof GdDriver) {
37-
imageinterlace($i, true);
38-
}
39-
40-
if ('pjpg' === $format) {
41-
$format = 'jpg';
42-
}
30+
$format = 'jpg';
4331
}
4432

45-
return (new ImageManager($driver))->read(
46-
$image->encodeByExtension($format, $quality)->toFilePointer()
33+
$image = (new ImageManager($driver))->read(
34+
$image->encodeByExtension($format, $quality)->toString()
4735
);
36+
37+
if ($interlace) {
38+
$image = $this->interlace($image, $driver);
39+
}
40+
41+
return $image;
4842
}
4943

5044
/**
@@ -104,4 +98,17 @@ public function getQuality(): int
10498

10599
return (int) $q;
106100
}
101+
102+
protected function interlace(ImageInterface $image, DriverInterface $driver): ImageInterface
103+
{
104+
$img = $image->core()->native();
105+
106+
if ($driver instanceof ImagickDriver) {
107+
$img->setInterlaceScheme(\Imagick::INTERLACE_PLANE);
108+
} elseif ($driver instanceof GdDriver) {
109+
imageinterlace($img, true);
110+
}
111+
112+
return $image;
113+
}
107114
}

0 commit comments

Comments
 (0)