14
14
15
15
use chillerlan \Traits \ContainerInterface ;
16
16
use ImageOptimizer \Optimizer ;
17
- use ImageOptimizer \OptimizerFactory ;
18
17
use Imagick ;
19
18
use Psr \Log \{LoggerAwareInterface , LoggerAwareTrait , LoggerInterface , NullLogger };
20
19
@@ -26,22 +25,32 @@ class Imagetiler implements LoggerAwareInterface{
26
25
*/
27
26
protected $ options ;
28
27
28
+ /**
29
+ * @var \ImageOptimizer\Optimizer
30
+ */
31
+ protected $ optimizer ;
32
+
29
33
/**
30
34
* Imagetiler constructor.
31
35
*
32
36
* @param \chillerlan\Traits\ContainerInterface|null $options
37
+ * @param \ImageOptimizer\Optimizer $optimizer
33
38
* @param \Psr\Log\LoggerInterface|null $logger
34
39
*
35
40
* @throws \chillerlan\Imagetiler\ImagetilerException
36
41
*/
37
- public function __construct (ContainerInterface $ options = null , LoggerInterface $ logger = null ){
42
+ public function __construct (ContainerInterface $ options = null , Optimizer $ optimizer = null , LoggerInterface $ logger = null ){
38
43
39
44
if (!extension_loaded ('imagick ' )){
40
45
throw new ImagetilerException ('Imagick extension is not available ' );
41
46
}
42
47
43
48
$ this ->setOptions ($ options ?? new ImagetilerOptions );
44
49
$ this ->setLogger ($ logger ?? new NullLogger );
50
+
51
+ if ($ optimizer instanceof Optimizer){
52
+ $ this ->setOptimizer ($ optimizer );
53
+ }
45
54
}
46
55
47
56
/**
@@ -81,6 +90,17 @@ public function setOptions(ContainerInterface $options):Imagetiler{
81
90
return $ this ;
82
91
}
83
92
93
+ /**
94
+ * @param \ImageOptimizer\Optimizer $optimizer
95
+ *
96
+ * @return \chillerlan\Imagetiler\Imagetiler
97
+ */
98
+ public function setOptimizer (Optimizer $ optimizer ):Imagetiler {
99
+ $ this ->optimizer = $ optimizer ;
100
+
101
+ return $ this ;
102
+ }
103
+
84
104
/**
85
105
* @param string $image_path
86
106
* @param string $out_path
@@ -102,13 +122,6 @@ public function process(string $image_path, string $out_path):Imagetiler{
102
122
103
123
}
104
124
105
- // load the optional image optimizer
106
- $ optimizer = null ;
107
-
108
- if ($ this ->options ->optimize_output ){
109
- $ optimizer = (new OptimizerFactory ($ this ->options ->optimizer_settings , $ this ->logger ))->get ();
110
- }
111
-
112
125
// prepare the zoom base images
113
126
$ this ->prepareZoomBaseImages ($ image_path , $ out_path );
114
127
@@ -122,7 +135,7 @@ public function process(string $image_path, string $out_path):Imagetiler{
122
135
throw new ImagetilerException ('cannot read base image ' .$ base_image .' for zoom ' .$ zoom );
123
136
}
124
137
125
- $ this ->createTilesForZoom (new Imagick ($ base_image ), $ zoom , $ out_path, $ optimizer );
138
+ $ this ->createTilesForZoom (new Imagick ($ base_image ), $ zoom , $ out_path );
126
139
}
127
140
128
141
// clean up base images
@@ -269,12 +282,11 @@ protected function createTilesForZoom(Imagick $im, int $zoom, string $out_path,
269
282
*
270
283
* @param Imagick $image
271
284
* @param string $dest full path with file name
272
- * @param \ImageOptimizer\Optimizer $optimizer
273
285
*
274
286
* @return void
275
287
* @throws \chillerlan\Imagetiler\ImagetilerException
276
288
*/
277
- protected function saveImage (Imagick $ image , string $ dest, Optimizer $ optimizer = null ):void {
289
+ protected function saveImage (Imagick $ image , string $ dest ):void {
278
290
$ dir = dirname ($ dest );
279
291
280
292
if (!is_dir ($ dir )){
@@ -292,8 +304,8 @@ protected function saveImage(Imagick $image, string $dest, Optimizer $optimizer
292
304
throw new ImagetilerException ('cannot save image ' .$ dest );
293
305
}
294
306
295
- if ($ optimizer instanceof Optimizer){
296
- $ optimizer ->optimize ($ dest );
307
+ if ($ this -> options -> optimize_output && $ this -> optimizer instanceof Optimizer){
308
+ $ this -> optimizer ->optimize ($ dest );
297
309
}
298
310
299
311
}
0 commit comments