5
5
use Intervention \Image \Drivers \Gd \Driver as GdDriver ;
6
6
use Intervention \Image \Drivers \Imagick \Driver as ImagickDriver ;
7
7
use Intervention \Image \ImageManager ;
8
+ use Intervention \Image \Interfaces \DriverInterface ;
8
9
use Intervention \Image \Interfaces \ImageInterface ;
9
10
10
11
class Encode extends BaseManipulator
@@ -21,30 +22,23 @@ public function run(ImageInterface $image): ImageInterface
21
22
$ format = $ this ->getFormat ($ image );
22
23
$ quality = $ this ->getQuality ();
23
24
$ driver = $ image ->driver ();
25
+ $ interlace = false ;
24
26
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 ;
31
29
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 ' ;
43
31
}
44
32
45
- return (new ImageManager ($ driver ))->read (
46
- $ image ->encodeByExtension ($ format , $ quality )->toFilePointer ()
33
+ $ image = (new ImageManager ($ driver ))->read (
34
+ $ image ->encodeByExtension ($ format , $ quality )->toString ()
47
35
);
36
+
37
+ if ($ interlace ) {
38
+ $ image = $ this ->interlace ($ image , $ driver );
39
+ }
40
+
41
+ return $ image ;
48
42
}
49
43
50
44
/**
@@ -104,4 +98,17 @@ public function getQuality(): int
104
98
105
99
return (int ) $ q ;
106
100
}
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
+ }
107
114
}
0 commit comments