From ec0b8df57ff6d6d1790c28b0ab29b7f1db5b9642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carles=20Brians=C3=B3?= Date: Sun, 5 Mar 2017 12:35:42 +0100 Subject: [PATCH] add jpeg interlaced support --- src/Engine/PhpGd/Helper/ResourceHelper.php | 3 ++ src/OptionPass/JpegInterlaceOptionPass.php | 25 +++++++++++++++ .../JpegInterlaceOptionPassTest.php | 31 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/OptionPass/JpegInterlaceOptionPass.php create mode 100644 tests/OptionPass/JpegInterlaceOptionPassTest.php diff --git a/src/Engine/PhpGd/Helper/ResourceHelper.php b/src/Engine/PhpGd/Helper/ResourceHelper.php index f8034b5..eddcdad 100644 --- a/src/Engine/PhpGd/Helper/ResourceHelper.php +++ b/src/Engine/PhpGd/Helper/ResourceHelper.php @@ -126,6 +126,9 @@ public function getContentsFromGdResource($format, $resource, array $options = [ break; case PhpGdContext::FORMAT_JPEG: $quality = isset($options['jpeg_quality']) ? $options['jpeg_quality'] : 100; + if (isset($options['jpeg_interlace'])) { + imageinterlace($resource, $options['jpeg_interlace']); + } $success = @imagejpeg($resource, null, $quality); break; case PhpGdContext::FORMAT_GIF: diff --git a/src/OptionPass/JpegInterlaceOptionPass.php b/src/OptionPass/JpegInterlaceOptionPass.php new file mode 100644 index 0000000..65561b0 --- /dev/null +++ b/src/OptionPass/JpegInterlaceOptionPass.php @@ -0,0 +1,25 @@ + + * @since 1.0.0 + */ +class JpegInterlaceOptionPass implements OptionPassInterface +{ + /** + * @inheritDoc + */ + public function process(array $options) + { + if ( + !isset($options['jpeg_interlace']) || + !is_bool($options['jpeg_interlace']) + ) { + $options['jpeg_interlace'] = false; + } + + return $options; + } +} diff --git a/tests/OptionPass/JpegInterlaceOptionPassTest.php b/tests/OptionPass/JpegInterlaceOptionPassTest.php new file mode 100644 index 0000000..fb7406c --- /dev/null +++ b/tests/OptionPass/JpegInterlaceOptionPassTest.php @@ -0,0 +1,31 @@ +pass = $this->getMock('Imagecraft\\OptionPass\\JpegInterlaceOptionPass', null); + } + + public function testProcess() + { + $option = $this->pass->process([]); + $this->assertEquals(false, $option['jpeg_interlace']); + + $option = $this->pass->process(['jpeg_interlace' => true]); + $this->assertEquals(true, $option['jpeg_interlace']); + + $option = $this->pass->process(['jpeg_interlace' => false]); + $this->assertEquals(false, $option['jpeg_interlace']); + + $option = $this->pass->process(['jpeg_interlace' => 10]); + $this->assertEquals(false, $option['jpeg_interlace']); + } +}