Completed
Push — master ( 86c6c7...787e65 )
by cam
04:34
created
ecrire/inc/filtres_images_lib_mini.php 2 patches
Indentation   +1204 added lines, -1204 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
 
20 20
 
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 include_spip('inc/filtres'); // par precaution
25 25
 include_spip('inc/filtres_images_mini'); // par precaution
@@ -39,21 +39,21 @@  discard block
 block discarded – undo
39 39
  *     Le code de la couleur en hexadécimal.
40 40
  */
41 41
 function _couleur_dec_to_hex($red, $green, $blue) {
42
-	$red = dechex($red);
43
-	$green = dechex($green);
44
-	$blue = dechex($blue);
45
-
46
-	if (strlen($red) == 1) {
47
-		$red = "0" . $red;
48
-	}
49
-	if (strlen($green) == 1) {
50
-		$green = "0" . $green;
51
-	}
52
-	if (strlen($blue) == 1) {
53
-		$blue = "0" . $blue;
54
-	}
55
-
56
-	return "$red$green$blue";
42
+    $red = dechex($red);
43
+    $green = dechex($green);
44
+    $blue = dechex($blue);
45
+
46
+    if (strlen($red) == 1) {
47
+        $red = "0" . $red;
48
+    }
49
+    if (strlen($green) == 1) {
50
+        $green = "0" . $green;
51
+    }
52
+    if (strlen($blue) == 1) {
53
+        $blue = "0" . $blue;
54
+    }
55
+
56
+    return "$red$green$blue";
57 57
 }
58 58
 
59 59
 /**
@@ -65,16 +65,16 @@  discard block
 block discarded – undo
65 65
  *     Un tableau des 3 éléments : rouge, vert, bleu.
66 66
  */
67 67
 function _couleur_hex_to_dec($couleur) {
68
-	$couleur = couleur_html_to_hex($couleur);
69
-	$couleur = ltrim($couleur, '#');
70
-	if (strlen($couleur) === 3) {
71
-		$couleur = $couleur[0] . $couleur[0] . $couleur[1] . $couleur[1] . $couleur[2] . $couleur[2];
72
-	}
73
-	$retour["red"] = hexdec(substr($couleur, 0, 2));
74
-	$retour["green"] = hexdec(substr($couleur, 2, 2));
75
-	$retour["blue"] = hexdec(substr($couleur, 4, 2));
76
-
77
-	return $retour;
68
+    $couleur = couleur_html_to_hex($couleur);
69
+    $couleur = ltrim($couleur, '#');
70
+    if (strlen($couleur) === 3) {
71
+        $couleur = $couleur[0] . $couleur[0] . $couleur[1] . $couleur[1] . $couleur[2] . $couleur[2];
72
+    }
73
+    $retour["red"] = hexdec(substr($couleur, 0, 2));
74
+    $retour["green"] = hexdec(substr($couleur, 2, 2));
75
+    $retour["blue"] = hexdec(substr($couleur, 4, 2));
76
+
77
+    return $retour;
78 78
 }
79 79
 
80 80
 /**
@@ -91,11 +91,11 @@  discard block
 block discarded – undo
91 91
  *     true si il faut supprimer le fichier temporaire ; false sinon.
92 92
  */
93 93
 function statut_effacer_images_temporaires($stat) {
94
-	static $statut = false; // par defaut on grave toute les images
95
-	if ($stat === 'get') {
96
-		return $statut;
97
-	}
98
-	$statut = $stat ? true : false;
94
+    static $statut = false; // par defaut on grave toute les images
95
+    if ($stat === 'get') {
96
+        return $statut;
97
+    }
98
+    $statut = $stat ? true : false;
99 99
 }
100 100
 
101 101
 
@@ -148,224 +148,224 @@  discard block
 block discarded – undo
148 148
  *     - array : tableau décrivant de l'image
149 149
  */
150 150
 function _image_valeurs_trans($img, $effet, $forcer_format = false, $fonction_creation = null, $find_in_path = false, $support_svg = false) {
151
-	static $images_recalcul = array();
152
-	if (strlen($img) == 0) {
153
-		return false;
154
-	}
155
-
156
-	$source = trim(extraire_attribut($img, 'src'));
157
-	if (strlen($source) < 1) {
158
-		$source = $img;
159
-		$img = "<img src='$source' />";
160
-	} # gerer img src="data:....base64"
161
-	elseif (preg_match('@^data:image/([^;]*);base64,(.*)$@isS', $source, $regs)
162
-	  and $extension = _image_trouver_extension_depuis_mime("image/".$regs[1])
163
-		and in_array($extension, _image_extensions_acceptees_en_entree())
164
-	) {
165
-		$local = sous_repertoire(_DIR_VAR, 'image-data') . md5($regs[2]) . '.' . _image_extension_normalisee($extension);
166
-		if (!file_exists($local)) {
167
-			ecrire_fichier($local, base64_decode($regs[2]));
168
-		}
169
-		$source = $local;
170
-		$img = inserer_attribut($img, 'src', $source);
171
-		# eviter les mauvaises surprises lors de conversions de format
172
-		$img = inserer_attribut($img, 'width', '');
173
-		$img = inserer_attribut($img, 'height', '');
174
-	}
175
-
176
-	// les protocoles web prennent au moins 3 lettres
177
-	if (tester_url_absolue($source)) {
178
-		include_spip('inc/distant');
179
-		$fichier = _DIR_RACINE . copie_locale($source);
180
-		if (!$fichier) {
181
-			return "";
182
-		}
183
-	} else {
184
-		// enlever le timestamp eventuel
185
-		if (strpos($source, "?") !== false) {
186
-			$source = preg_replace(',[?][0-9]+$,', '', $source);
187
-		}
188
-		if (strpos($source, "?") !== false
189
-			and strncmp($source, _DIR_IMG, strlen(_DIR_IMG)) == 0
190
-			and file_exists($f = preg_replace(',[?].*$,', '', $source))
191
-		) {
192
-			$source = $f;
193
-		}
194
-		$fichier = $source;
195
-	}
196
-
197
-	$terminaison_dest = "";
198
-	if ($terminaison = _image_trouver_extension($fichier)) {
199
-		$terminaison_dest = ($terminaison == 'gif') ? 'png' : $terminaison;
200
-	}
201
-
202
-	if ($forcer_format !== false
203
-		// ignorer forcer_format si on a une image svg, que le filtre appelant ne supporte pas SVG, et que le forcage est un autre format image
204
-		and ($terminaison_dest !== 'svg' or $support_svg or !in_array($forcer_format,_image_extensions_acceptees_en_sortie()))) {
205
-		$terminaison_dest = $forcer_format;
206
-	}
207
-
208
-	if (!$terminaison_dest) {
209
-		return false;
210
-	}
211
-
212
-	$nom_fichier = substr($fichier, 0, strlen($fichier) - (strlen($terminaison) + 1));
213
-	$fichier_dest = $nom_fichier;
214
-	if (($find_in_path and $f = find_in_path($fichier) and $fichier = $f)
215
-		or @file_exists($f = $fichier)
216
-	) {
217
-		// on passe la balise img a taille image qui exraira les attributs si possible
218
-		// au lieu de faire un acces disque sur le fichier
219
-		list($ret["hauteur"], $ret["largeur"]) = taille_image($find_in_path ? $f : $img);
220
-		$date_src = @filemtime($f);
221
-	} elseif (@file_exists($f = "$fichier.src")
222
-		and lire_fichier($f, $valeurs)
223
-		and $valeurs = unserialize($valeurs)
224
-		and isset($valeurs["hauteur_dest"])
225
-		and isset($valeurs["largeur_dest"])
226
-	) {
227
-		$ret["hauteur"] = $valeurs["hauteur_dest"];
228
-		$ret["largeur"] = $valeurs["largeur_dest"];
229
-		$date_src = $valeurs["date"];
230
-	} // pas de fichier source par la
231
-	else {
232
-		return false;
233
-	}
234
-
235
-	// pas de taille mesurable
236
-	if (!($ret["hauteur"] or $ret["largeur"])) {
237
-		return false;
238
-	}
239
-
240
-	// les images calculees dependent du chemin du fichier source
241
-	// pour une meme image source et un meme filtre on aboutira a 2 fichiers selon si l'appel est dans le public ou dans le prive
242
-	// ce n'est pas totalement optimal en terme de stockage, mais chaque image est associee a un fichier .src
243
-	// qui contient la methode de reconstrucion (le filtre + les arguments d'appel) et les arguments different entre prive et public
244
-	// la mise en commun du fichier image cree donc un bug et des problemes qui necessiteraient beaucoup de complexite de code
245
-	// alors que ca concerne peu de site au final
246
-	// la release de r23632+r23633+r23634 a provoque peu de remontee de bug attestant du peu de sites impactes
247
-	$identifiant = $fichier;
248
-
249
-	// cas general :
250
-	// on a un dossier cache commun et un nom de fichier qui varie avec l'effet
251
-	// cas particulier de reduire :
252
-	// un cache par dimension, et le nom de fichier est conserve, suffixe par la dimension aussi
253
-	$cache = "cache-gd2";
254
-	if (substr($effet, 0, 7) == 'reduire') {
255
-		list(, $maxWidth, $maxHeight) = explode('-', $effet);
256
-		list($destWidth, $destHeight) = _image_ratio($ret['largeur'], $ret['hauteur'], $maxWidth, $maxHeight);
257
-		$ret['largeur_dest'] = $destWidth;
258
-		$ret['hauteur_dest'] = $destHeight;
259
-		$effet = "L{$destWidth}xH$destHeight";
260
-		$cache = "cache-vignettes";
261
-		$fichier_dest = basename($fichier_dest);
262
-		if (($ret['largeur'] <= $maxWidth) && ($ret['hauteur'] <= $maxHeight)) {
263
-			// on garde la terminaison initiale car image simplement copiee
264
-			// et on postfixe son nom avec un md5 du path
265
-			$terminaison_dest = $terminaison;
266
-			$fichier_dest .= '-' . substr(md5("$identifiant"), 0, 5);
267
-		} else {
268
-			$fichier_dest .= '-' . substr(md5("$identifiant-$effet"), 0, 5);
269
-		}
270
-		$cache = sous_repertoire(_DIR_VAR, $cache);
271
-		$cache = sous_repertoire($cache, $effet);
272
-	} else {
273
-		$fichier_dest = md5("$identifiant-$effet");
274
-		$cache = sous_repertoire(_DIR_VAR, $cache);
275
-		$cache = sous_repertoire($cache, substr($fichier_dest, 0, 2));
276
-		$fichier_dest = substr($fichier_dest, 2);
277
-	}
278
-
279
-	$fichier_dest = $cache . $fichier_dest . "." . $terminaison_dest;
280
-
281
-	$GLOBALS["images_calculees"][] = $fichier_dest;
282
-
283
-	$creer = true;
284
-	// si recalcul des images demande, recalculer chaque image une fois
285
-	if (defined('_VAR_IMAGES') and _VAR_IMAGES and !isset($images_recalcul[$fichier_dest])) {
286
-		$images_recalcul[$fichier_dest] = true;
287
-	} else {
288
-		if (@file_exists($f = $fichier_dest)) {
289
-			if (filemtime($f) >= $date_src) {
290
-				$creer = false;
291
-			}
292
-		} else {
293
-			if (@file_exists($f = "$fichier_dest.src")
294
-				and lire_fichier($f, $valeurs)
295
-				and $valeurs = unserialize($valeurs)
296
-				and $valeurs["date"] >= $date_src
297
-			) {
298
-				$creer = false;
299
-			}
300
-		}
301
-	}
302
-	if ($creer) {
303
-		if (!@file_exists($fichier)) {
304
-			if (!@file_exists("$fichier.src")) {
305
-				spip_log("Image absente : $fichier");
306
-
307
-				return false;
308
-			}
309
-			# on reconstruit l'image source absente a partir de la chaine des .src
310
-			reconstruire_image_intermediaire($fichier);
311
-		}
312
-	}
313
-
314
-	if ($creer) {
315
-		spip_log("filtre image " . ($fonction_creation ? reset($fonction_creation) : '') . "[$effet] sur $fichier",
316
-			"images" . _LOG_DEBUG);
317
-	}
318
-
319
-	$term_fonction = _image_trouver_extension_pertinente($fichier);
320
-	$ret["fonction_imagecreatefrom"] = "_imagecreatefrom" . $term_fonction;
321
-	$ret["fichier"] = $fichier;
322
-	$ret["fonction_image"] = "_image_image" . $terminaison_dest;
323
-	$ret["fichier_dest"] = $fichier_dest;
324
-	$ret["format_source"] = _image_extension_normalisee($terminaison);
325
-	$ret["format_dest"] = $terminaison_dest;
326
-	$ret["date_src"] = $date_src;
327
-	$ret["creer"] = $creer;
328
-	$ret["class"] = extraire_attribut($img, 'class');
329
-	$ret["alt"] = extraire_attribut($img, 'alt');
330
-	$ret["style"] = extraire_attribut($img, 'style');
331
-	$ret["tag"] = $img;
332
-	if ($fonction_creation) {
333
-		$ret["reconstruction"] = $fonction_creation;
334
-		# ecrire ici comment creer le fichier, car il est pas sur qu'on l'ecrira reelement 
335
-		# cas de image_reduire qui finalement ne reduit pas l'image source
336
-		# ca evite d'essayer de le creer au prochain hit si il n'est pas la
337
-		#ecrire_fichier($ret['fichier_dest'].'.src',serialize($ret),true);
338
-	}
339
-
340
-	$ret = pipeline('image_preparer_filtre', array(
341
-			'args' => array(
342
-				'img' => $img,
343
-				'effet' => $effet,
344
-				'forcer_format' => $forcer_format,
345
-				'fonction_creation' => $fonction_creation,
346
-				'find_in_path' => $find_in_path,
347
-			),
348
-			'data' => $ret
349
-		)
350
-	);
351
-
352
-	// une globale pour le debug en cas de crash memoire
353
-	$GLOBALS["derniere_image_calculee"] = $ret;
354
-
355
-	// traiter le cas particulier des SVG : si le filtre n'a pas annonce explicitement qu'il savait faire, on delegue
356
-	if ($term_fonction === 'svg') {
357
-		if ($creer and !$support_svg) {
358
-			process_image_svg_identite($ret);
359
-			$ret['creer'] = false;
360
-		}
361
-	}
362
-	else {
363
-		if (!function_exists($ret["fonction_imagecreatefrom"])) {
364
-			return false;
365
-		}
366
-	}
367
-
368
-	return $ret;
151
+    static $images_recalcul = array();
152
+    if (strlen($img) == 0) {
153
+        return false;
154
+    }
155
+
156
+    $source = trim(extraire_attribut($img, 'src'));
157
+    if (strlen($source) < 1) {
158
+        $source = $img;
159
+        $img = "<img src='$source' />";
160
+    } # gerer img src="data:....base64"
161
+    elseif (preg_match('@^data:image/([^;]*);base64,(.*)$@isS', $source, $regs)
162
+      and $extension = _image_trouver_extension_depuis_mime("image/".$regs[1])
163
+        and in_array($extension, _image_extensions_acceptees_en_entree())
164
+    ) {
165
+        $local = sous_repertoire(_DIR_VAR, 'image-data') . md5($regs[2]) . '.' . _image_extension_normalisee($extension);
166
+        if (!file_exists($local)) {
167
+            ecrire_fichier($local, base64_decode($regs[2]));
168
+        }
169
+        $source = $local;
170
+        $img = inserer_attribut($img, 'src', $source);
171
+        # eviter les mauvaises surprises lors de conversions de format
172
+        $img = inserer_attribut($img, 'width', '');
173
+        $img = inserer_attribut($img, 'height', '');
174
+    }
175
+
176
+    // les protocoles web prennent au moins 3 lettres
177
+    if (tester_url_absolue($source)) {
178
+        include_spip('inc/distant');
179
+        $fichier = _DIR_RACINE . copie_locale($source);
180
+        if (!$fichier) {
181
+            return "";
182
+        }
183
+    } else {
184
+        // enlever le timestamp eventuel
185
+        if (strpos($source, "?") !== false) {
186
+            $source = preg_replace(',[?][0-9]+$,', '', $source);
187
+        }
188
+        if (strpos($source, "?") !== false
189
+            and strncmp($source, _DIR_IMG, strlen(_DIR_IMG)) == 0
190
+            and file_exists($f = preg_replace(',[?].*$,', '', $source))
191
+        ) {
192
+            $source = $f;
193
+        }
194
+        $fichier = $source;
195
+    }
196
+
197
+    $terminaison_dest = "";
198
+    if ($terminaison = _image_trouver_extension($fichier)) {
199
+        $terminaison_dest = ($terminaison == 'gif') ? 'png' : $terminaison;
200
+    }
201
+
202
+    if ($forcer_format !== false
203
+        // ignorer forcer_format si on a une image svg, que le filtre appelant ne supporte pas SVG, et que le forcage est un autre format image
204
+        and ($terminaison_dest !== 'svg' or $support_svg or !in_array($forcer_format,_image_extensions_acceptees_en_sortie()))) {
205
+        $terminaison_dest = $forcer_format;
206
+    }
207
+
208
+    if (!$terminaison_dest) {
209
+        return false;
210
+    }
211
+
212
+    $nom_fichier = substr($fichier, 0, strlen($fichier) - (strlen($terminaison) + 1));
213
+    $fichier_dest = $nom_fichier;
214
+    if (($find_in_path and $f = find_in_path($fichier) and $fichier = $f)
215
+        or @file_exists($f = $fichier)
216
+    ) {
217
+        // on passe la balise img a taille image qui exraira les attributs si possible
218
+        // au lieu de faire un acces disque sur le fichier
219
+        list($ret["hauteur"], $ret["largeur"]) = taille_image($find_in_path ? $f : $img);
220
+        $date_src = @filemtime($f);
221
+    } elseif (@file_exists($f = "$fichier.src")
222
+        and lire_fichier($f, $valeurs)
223
+        and $valeurs = unserialize($valeurs)
224
+        and isset($valeurs["hauteur_dest"])
225
+        and isset($valeurs["largeur_dest"])
226
+    ) {
227
+        $ret["hauteur"] = $valeurs["hauteur_dest"];
228
+        $ret["largeur"] = $valeurs["largeur_dest"];
229
+        $date_src = $valeurs["date"];
230
+    } // pas de fichier source par la
231
+    else {
232
+        return false;
233
+    }
234
+
235
+    // pas de taille mesurable
236
+    if (!($ret["hauteur"] or $ret["largeur"])) {
237
+        return false;
238
+    }
239
+
240
+    // les images calculees dependent du chemin du fichier source
241
+    // pour une meme image source et un meme filtre on aboutira a 2 fichiers selon si l'appel est dans le public ou dans le prive
242
+    // ce n'est pas totalement optimal en terme de stockage, mais chaque image est associee a un fichier .src
243
+    // qui contient la methode de reconstrucion (le filtre + les arguments d'appel) et les arguments different entre prive et public
244
+    // la mise en commun du fichier image cree donc un bug et des problemes qui necessiteraient beaucoup de complexite de code
245
+    // alors que ca concerne peu de site au final
246
+    // la release de r23632+r23633+r23634 a provoque peu de remontee de bug attestant du peu de sites impactes
247
+    $identifiant = $fichier;
248
+
249
+    // cas general :
250
+    // on a un dossier cache commun et un nom de fichier qui varie avec l'effet
251
+    // cas particulier de reduire :
252
+    // un cache par dimension, et le nom de fichier est conserve, suffixe par la dimension aussi
253
+    $cache = "cache-gd2";
254
+    if (substr($effet, 0, 7) == 'reduire') {
255
+        list(, $maxWidth, $maxHeight) = explode('-', $effet);
256
+        list($destWidth, $destHeight) = _image_ratio($ret['largeur'], $ret['hauteur'], $maxWidth, $maxHeight);
257
+        $ret['largeur_dest'] = $destWidth;
258
+        $ret['hauteur_dest'] = $destHeight;
259
+        $effet = "L{$destWidth}xH$destHeight";
260
+        $cache = "cache-vignettes";
261
+        $fichier_dest = basename($fichier_dest);
262
+        if (($ret['largeur'] <= $maxWidth) && ($ret['hauteur'] <= $maxHeight)) {
263
+            // on garde la terminaison initiale car image simplement copiee
264
+            // et on postfixe son nom avec un md5 du path
265
+            $terminaison_dest = $terminaison;
266
+            $fichier_dest .= '-' . substr(md5("$identifiant"), 0, 5);
267
+        } else {
268
+            $fichier_dest .= '-' . substr(md5("$identifiant-$effet"), 0, 5);
269
+        }
270
+        $cache = sous_repertoire(_DIR_VAR, $cache);
271
+        $cache = sous_repertoire($cache, $effet);
272
+    } else {
273
+        $fichier_dest = md5("$identifiant-$effet");
274
+        $cache = sous_repertoire(_DIR_VAR, $cache);
275
+        $cache = sous_repertoire($cache, substr($fichier_dest, 0, 2));
276
+        $fichier_dest = substr($fichier_dest, 2);
277
+    }
278
+
279
+    $fichier_dest = $cache . $fichier_dest . "." . $terminaison_dest;
280
+
281
+    $GLOBALS["images_calculees"][] = $fichier_dest;
282
+
283
+    $creer = true;
284
+    // si recalcul des images demande, recalculer chaque image une fois
285
+    if (defined('_VAR_IMAGES') and _VAR_IMAGES and !isset($images_recalcul[$fichier_dest])) {
286
+        $images_recalcul[$fichier_dest] = true;
287
+    } else {
288
+        if (@file_exists($f = $fichier_dest)) {
289
+            if (filemtime($f) >= $date_src) {
290
+                $creer = false;
291
+            }
292
+        } else {
293
+            if (@file_exists($f = "$fichier_dest.src")
294
+                and lire_fichier($f, $valeurs)
295
+                and $valeurs = unserialize($valeurs)
296
+                and $valeurs["date"] >= $date_src
297
+            ) {
298
+                $creer = false;
299
+            }
300
+        }
301
+    }
302
+    if ($creer) {
303
+        if (!@file_exists($fichier)) {
304
+            if (!@file_exists("$fichier.src")) {
305
+                spip_log("Image absente : $fichier");
306
+
307
+                return false;
308
+            }
309
+            # on reconstruit l'image source absente a partir de la chaine des .src
310
+            reconstruire_image_intermediaire($fichier);
311
+        }
312
+    }
313
+
314
+    if ($creer) {
315
+        spip_log("filtre image " . ($fonction_creation ? reset($fonction_creation) : '') . "[$effet] sur $fichier",
316
+            "images" . _LOG_DEBUG);
317
+    }
318
+
319
+    $term_fonction = _image_trouver_extension_pertinente($fichier);
320
+    $ret["fonction_imagecreatefrom"] = "_imagecreatefrom" . $term_fonction;
321
+    $ret["fichier"] = $fichier;
322
+    $ret["fonction_image"] = "_image_image" . $terminaison_dest;
323
+    $ret["fichier_dest"] = $fichier_dest;
324
+    $ret["format_source"] = _image_extension_normalisee($terminaison);
325
+    $ret["format_dest"] = $terminaison_dest;
326
+    $ret["date_src"] = $date_src;
327
+    $ret["creer"] = $creer;
328
+    $ret["class"] = extraire_attribut($img, 'class');
329
+    $ret["alt"] = extraire_attribut($img, 'alt');
330
+    $ret["style"] = extraire_attribut($img, 'style');
331
+    $ret["tag"] = $img;
332
+    if ($fonction_creation) {
333
+        $ret["reconstruction"] = $fonction_creation;
334
+        # ecrire ici comment creer le fichier, car il est pas sur qu'on l'ecrira reelement 
335
+        # cas de image_reduire qui finalement ne reduit pas l'image source
336
+        # ca evite d'essayer de le creer au prochain hit si il n'est pas la
337
+        #ecrire_fichier($ret['fichier_dest'].'.src',serialize($ret),true);
338
+    }
339
+
340
+    $ret = pipeline('image_preparer_filtre', array(
341
+            'args' => array(
342
+                'img' => $img,
343
+                'effet' => $effet,
344
+                'forcer_format' => $forcer_format,
345
+                'fonction_creation' => $fonction_creation,
346
+                'find_in_path' => $find_in_path,
347
+            ),
348
+            'data' => $ret
349
+        )
350
+    );
351
+
352
+    // une globale pour le debug en cas de crash memoire
353
+    $GLOBALS["derniere_image_calculee"] = $ret;
354
+
355
+    // traiter le cas particulier des SVG : si le filtre n'a pas annonce explicitement qu'il savait faire, on delegue
356
+    if ($term_fonction === 'svg') {
357
+        if ($creer and !$support_svg) {
358
+            process_image_svg_identite($ret);
359
+            $ret['creer'] = false;
360
+        }
361
+    }
362
+    else {
363
+        if (!function_exists($ret["fonction_imagecreatefrom"])) {
364
+            return false;
365
+        }
366
+    }
367
+
368
+    return $ret;
369 369
 }
370 370
 
371 371
 
@@ -374,51 +374,51 @@  discard block
 block discarded – undo
374 374
  * @return array
375 375
  */
376 376
 function _image_extensions_acceptees_en_entree() {
377
-	static $extensions = null;
378
-	if (empty($extensions)) {
379
-		$extensions = ['png', 'gif', 'jpg', 'jpeg'];
380
-		if (!empty($GLOBALS['meta']['gd_formats'])) {
381
-			// action=tester renseigne gd_formats et detecte le support de webp
382
-			$extensions = array_merge(explode(',', $GLOBALS['meta']['gd_formats']));
383
-			$extensions = array_map('trim', $extensions);
384
-			$extensions = array_filter($extensions);
385
-			$extensions = array_unique($extensions);
386
-		}
387
-		$extensions[] = 'svg'; // on le supporte toujours avec des fonctions specifiques
388
-	}
389
-
390
-	return $extensions;
377
+    static $extensions = null;
378
+    if (empty($extensions)) {
379
+        $extensions = ['png', 'gif', 'jpg', 'jpeg'];
380
+        if (!empty($GLOBALS['meta']['gd_formats'])) {
381
+            // action=tester renseigne gd_formats et detecte le support de webp
382
+            $extensions = array_merge(explode(',', $GLOBALS['meta']['gd_formats']));
383
+            $extensions = array_map('trim', $extensions);
384
+            $extensions = array_filter($extensions);
385
+            $extensions = array_unique($extensions);
386
+        }
387
+        $extensions[] = 'svg'; // on le supporte toujours avec des fonctions specifiques
388
+    }
389
+
390
+    return $extensions;
391 391
 }
392 392
 
393 393
 /**
394 394
  * @return array|string[]|null
395 395
  */
396 396
 function _image_extensions_acceptees_en_sortie(){
397
-	static $extensions = null;
398
-	if (empty($extensions)){
399
-		$extensions = _image_extensions_acceptees_en_entree();
400
-		$extensions = array_diff($extensions, ['jpeg']);
401
-		if (in_array('gif', $extensions) and !function_exists('imagegif')) {
402
-			$extensions = array_diff($extensions, ['gif']);
403
-		}
404
-		if (in_array('webp', $extensions) and !function_exists('imagewebp')) {
405
-			$extensions = array_diff($extensions, ['webp']);
406
-		}
407
-	}
408
-
409
-	return $extensions;
397
+    static $extensions = null;
398
+    if (empty($extensions)){
399
+        $extensions = _image_extensions_acceptees_en_entree();
400
+        $extensions = array_diff($extensions, ['jpeg']);
401
+        if (in_array('gif', $extensions) and !function_exists('imagegif')) {
402
+            $extensions = array_diff($extensions, ['gif']);
403
+        }
404
+        if (in_array('webp', $extensions) and !function_exists('imagewebp')) {
405
+            $extensions = array_diff($extensions, ['webp']);
406
+        }
407
+    }
408
+
409
+    return $extensions;
410 410
 }
411 411
 
412 412
 function _image_extension_normalisee($extension){
413
-	$extension = strtolower($extension);
414
-	if ($extension === 'jpeg') {
415
-		$extension = 'jpg';
416
-	}
417
-	return $extension;
413
+    $extension = strtolower($extension);
414
+    if ($extension === 'jpeg') {
415
+        $extension = 'jpg';
416
+    }
417
+    return $extension;
418 418
 }
419 419
 
420 420
 function _image_extensions_conservent_transparence(){
421
-	return ['png', 'webp'];
421
+    return ['png', 'webp'];
422 422
 }
423 423
 
424 424
 
@@ -428,12 +428,12 @@  discard block
 block discarded – undo
428 428
  * @return string
429 429
  */
430 430
 function _image_trouver_extension($path) {
431
-	$preg_extensions = implode('|', _image_extensions_acceptees_en_entree());
432
-	if (preg_match(",\.($preg_extensions)($|[?]),i", $path, $regs)) {
433
-		$terminaison = strtolower($regs[1]);
434
-		return $terminaison;
435
-	}
436
-	return '';
431
+    $preg_extensions = implode('|', _image_extensions_acceptees_en_entree());
432
+    if (preg_match(",\.($preg_extensions)($|[?]),i", $path, $regs)) {
433
+        $terminaison = strtolower($regs[1]);
434
+        return $terminaison;
435
+    }
436
+    return '';
437 437
 }
438 438
 
439 439
 /**
@@ -444,33 +444,33 @@  discard block
 block discarded – undo
444 444
  * @return string Extension, dans le format attendu par les fonctions 'gd' ('jpeg' pour les .jpg par exemple)
445 445
  */
446 446
 function _image_trouver_extension_pertinente($path) {
447
-	$path = supprimer_timestamp($path);
448
-	$terminaison = _image_trouver_extension($path);
449
-	if ($terminaison == 'jpg') {
450
-		$terminaison = 'jpeg';
451
-	}
452
-
453
-	if (!file_exists($path)) {
454
-		return $terminaison;
455
-	}
456
-
457
-	if (!$info = @spip_getimagesize($path)) {
458
-		return $terminaison;
459
-	}
460
-
461
-	if (isset($info['mime'])) {
462
-		$mime = $info['mime'];
463
-	}
464
-	else {
465
-		$mime = image_type_to_mime_type($info[2]);
466
-	}
467
-
468
-	$_terminaison = _image_trouver_extension_depuis_mime($mime);
469
-	if ($_terminaison and $_terminaison !== $terminaison) {
470
-		spip_log("Mauvaise extension du fichier : $path . Son type mime est : $mime", "images." . _LOG_INFO_IMPORTANTE);
471
-		$terminaison = $_terminaison;
472
-	}
473
-	return $terminaison;
447
+    $path = supprimer_timestamp($path);
448
+    $terminaison = _image_trouver_extension($path);
449
+    if ($terminaison == 'jpg') {
450
+        $terminaison = 'jpeg';
451
+    }
452
+
453
+    if (!file_exists($path)) {
454
+        return $terminaison;
455
+    }
456
+
457
+    if (!$info = @spip_getimagesize($path)) {
458
+        return $terminaison;
459
+    }
460
+
461
+    if (isset($info['mime'])) {
462
+        $mime = $info['mime'];
463
+    }
464
+    else {
465
+        $mime = image_type_to_mime_type($info[2]);
466
+    }
467
+
468
+    $_terminaison = _image_trouver_extension_depuis_mime($mime);
469
+    if ($_terminaison and $_terminaison !== $terminaison) {
470
+        spip_log("Mauvaise extension du fichier : $path . Son type mime est : $mime", "images." . _LOG_INFO_IMPORTANTE);
471
+        $terminaison = $_terminaison;
472
+    }
473
+    return $terminaison;
474 474
 }
475 475
 
476 476
 /**
@@ -478,36 +478,36 @@  discard block
 block discarded – undo
478 478
  * @return string
479 479
  */
480 480
 function _image_trouver_extension_depuis_mime($mime) {
481
-	switch (strtolower($mime)) {
482
-		case 'image/png':
483
-		case 'image/x-png':
484
-			$terminaison = 'png';
485
-			break;
486
-
487
-		case 'image/jpg':
488
-		case 'image/jpeg':
489
-		case 'image/pjpeg':
490
-			$terminaison = 'jpeg';
491
-			break;
492
-
493
-		case 'image/gif':
494
-			$terminaison = 'gif';
495
-			break;
496
-
497
-		case 'image/webp':
498
-		case 'image/x-webp':
499
-			$terminaison = 'webp';
500
-			break;
501
-
502
-		case 'image/svg+xml':
503
-			$terminaison = 'svg';
504
-			break;
505
-
506
-		default:
507
-			$terminaison = '';
508
-	}
509
-
510
-	return $terminaison;
481
+    switch (strtolower($mime)) {
482
+        case 'image/png':
483
+        case 'image/x-png':
484
+            $terminaison = 'png';
485
+            break;
486
+
487
+        case 'image/jpg':
488
+        case 'image/jpeg':
489
+        case 'image/pjpeg':
490
+            $terminaison = 'jpeg';
491
+            break;
492
+
493
+        case 'image/gif':
494
+            $terminaison = 'gif';
495
+            break;
496
+
497
+        case 'image/webp':
498
+        case 'image/x-webp':
499
+            $terminaison = 'webp';
500
+            break;
501
+
502
+        case 'image/svg+xml':
503
+            $terminaison = 'svg';
504
+            break;
505
+
506
+        default:
507
+            $terminaison = '';
508
+    }
509
+
510
+    return $terminaison;
511 511
 }
512 512
 
513 513
 
@@ -527,18 +527,18 @@  discard block
 block discarded – undo
527 527
  *     Une ressource de type Image GD.
528 528
  */
529 529
 function _imagecreatefrom_func(string $func, string $filename) {
530
-	if (!function_exists($func)) {
531
-		spip_log("GD indisponible : $func inexistante. Traitement $filename impossible.", _LOG_CRITIQUE);
532
-		erreur_squelette("GD indisponible : $func inexistante. Traitement $filename impossible.");
533
-		return null;
534
-	}
535
-	$img = @$func($filename);
536
-	if (!$img) {
537
-		spip_log("Erreur lecture imagecreatefromjpeg $filename", _LOG_CRITIQUE);
538
-		erreur_squelette("Erreur lecture imagecreatefromjpeg $filename");
539
-		$img = imagecreate(10, 10);
540
-	}
541
-	return $img;
530
+    if (!function_exists($func)) {
531
+        spip_log("GD indisponible : $func inexistante. Traitement $filename impossible.", _LOG_CRITIQUE);
532
+        erreur_squelette("GD indisponible : $func inexistante. Traitement $filename impossible.");
533
+        return null;
534
+    }
535
+    $img = @$func($filename);
536
+    if (!$img) {
537
+        spip_log("Erreur lecture imagecreatefromjpeg $filename", _LOG_CRITIQUE);
538
+        erreur_squelette("Erreur lecture imagecreatefromjpeg $filename");
539
+        $img = imagecreate(10, 10);
540
+    }
541
+    return $img;
542 542
 }
543 543
 
544 544
 /**
@@ -554,7 +554,7 @@  discard block
 block discarded – undo
554 554
  *     Une ressource de type Image GD.
555 555
  */
556 556
 function _imagecreatefromjpeg($filename) {
557
-	return _imagecreatefrom_func('imagecreatefromjpeg', $filename);
557
+    return _imagecreatefrom_func('imagecreatefromjpeg', $filename);
558 558
 }
559 559
 
560 560
 /**
@@ -570,7 +570,7 @@  discard block
 block discarded – undo
570 570
  *     Une ressource de type Image GD.
571 571
  */
572 572
 function _imagecreatefrompng($filename) {
573
-	return _imagecreatefrom_func('imagecreatefrompng', $filename);
573
+    return _imagecreatefrom_func('imagecreatefrompng', $filename);
574 574
 }
575 575
 
576 576
 /**
@@ -586,7 +586,7 @@  discard block
 block discarded – undo
586 586
  *     Une ressource de type Image GD.
587 587
  */
588 588
 function _imagecreatefromgif($filename) {
589
-	return _imagecreatefrom_func('imagecreatefromgif', $filename);
589
+    return _imagecreatefrom_func('imagecreatefromgif', $filename);
590 590
 }
591 591
 
592 592
 
@@ -603,7 +603,7 @@  discard block
 block discarded – undo
603 603
  *     Une ressource de type Image GD.
604 604
  */
605 605
 function _imagecreatefromwebp($filename) {
606
-	return _imagecreatefrom_func('imagecreatefromwebp', $filename);
606
+    return _imagecreatefrom_func('imagecreatefromwebp', $filename);
607 607
 }
608 608
 
609 609
 /**
@@ -621,24 +621,24 @@  discard block
 block discarded – undo
621 621
  *     - true si une image est bien retournée.
622 622
  */
623 623
 function _image_imagepng($img, $fichier) {
624
-	if (!function_exists('imagepng')) {
625
-		return false;
626
-	}
627
-	$tmp = $fichier . ".tmp";
628
-	$ret = imagepng($img, $tmp);
629
-	if (file_exists($tmp)) {
630
-		$taille_test = getimagesize($tmp);
631
-		if ($taille_test[0] < 1) {
632
-			return false;
633
-		}
634
-
635
-		spip_unlink($fichier); // le fichier peut deja exister
636
-		@rename($tmp, $fichier);
637
-
638
-		return $ret;
639
-	}
640
-
641
-	return false;
624
+    if (!function_exists('imagepng')) {
625
+        return false;
626
+    }
627
+    $tmp = $fichier . ".tmp";
628
+    $ret = imagepng($img, $tmp);
629
+    if (file_exists($tmp)) {
630
+        $taille_test = getimagesize($tmp);
631
+        if ($taille_test[0] < 1) {
632
+            return false;
633
+        }
634
+
635
+        spip_unlink($fichier); // le fichier peut deja exister
636
+        @rename($tmp, $fichier);
637
+
638
+        return $ret;
639
+    }
640
+
641
+    return false;
642 642
 }
643 643
 
644 644
 /**
@@ -656,24 +656,24 @@  discard block
 block discarded – undo
656 656
  *     - true si une image est bien retournée.
657 657
  */
658 658
 function _image_imagegif($img, $fichier) {
659
-	if (!function_exists('imagegif')) {
660
-		return false;
661
-	}
662
-	$tmp = $fichier . ".tmp";
663
-	$ret = imagegif($img, $tmp);
664
-	if (file_exists($tmp)) {
665
-		$taille_test = getimagesize($tmp);
666
-		if ($taille_test[0] < 1) {
667
-			return false;
668
-		}
669
-
670
-		spip_unlink($fichier); // le fichier peut deja exister
671
-		@rename($tmp, $fichier);
672
-
673
-		return $ret;
674
-	}
675
-
676
-	return false;
659
+    if (!function_exists('imagegif')) {
660
+        return false;
661
+    }
662
+    $tmp = $fichier . ".tmp";
663
+    $ret = imagegif($img, $tmp);
664
+    if (file_exists($tmp)) {
665
+        $taille_test = getimagesize($tmp);
666
+        if ($taille_test[0] < 1) {
667
+            return false;
668
+        }
669
+
670
+        spip_unlink($fichier); // le fichier peut deja exister
671
+        @rename($tmp, $fichier);
672
+
673
+        return $ret;
674
+    }
675
+
676
+    return false;
677 677
 }
678 678
 
679 679
 /**
@@ -696,29 +696,29 @@  discard block
 block discarded – undo
696 696
  *     - true si une image est bien retournée.
697 697
  */
698 698
 function _image_imagejpg($img, $fichier, $qualite = _IMG_GD_QUALITE) {
699
-	if (!function_exists('imagejpeg')) {
700
-		return false;
701
-	}
702
-	$tmp = $fichier . ".tmp";
699
+    if (!function_exists('imagejpeg')) {
700
+        return false;
701
+    }
702
+    $tmp = $fichier . ".tmp";
703 703
 
704
-	// Enable interlancing
705
-	imageinterlace($img, true);
704
+    // Enable interlancing
705
+    imageinterlace($img, true);
706 706
 
707
-	$ret = imagejpeg($img, $tmp, $qualite);
707
+    $ret = imagejpeg($img, $tmp, $qualite);
708 708
 
709
-	if (file_exists($tmp)) {
710
-		$taille_test = getimagesize($tmp);
711
-		if ($taille_test[0] < 1) {
712
-			return false;
713
-		}
709
+    if (file_exists($tmp)) {
710
+        $taille_test = getimagesize($tmp);
711
+        if ($taille_test[0] < 1) {
712
+            return false;
713
+        }
714 714
 
715
-		spip_unlink($fichier); // le fichier peut deja exister
716
-		@rename($tmp, $fichier);
715
+        spip_unlink($fichier); // le fichier peut deja exister
716
+        @rename($tmp, $fichier);
717 717
 
718
-		return $ret;
719
-	}
718
+        return $ret;
719
+    }
720 720
 
721
-	return false;
721
+    return false;
722 722
 }
723 723
 
724 724
 /**
@@ -736,9 +736,9 @@  discard block
 block discarded – undo
736 736
  *     true si le fichier a bien été créé ; false sinon.
737 737
  */
738 738
 function _image_imageico($img, $fichier) {
739
-	$gd_image_array = array($img);
739
+    $gd_image_array = array($img);
740 740
 
741
-	return ecrire_fichier($fichier, phpthumb_functions::GD2ICOstring($gd_image_array));
741
+    return ecrire_fichier($fichier, phpthumb_functions::GD2ICOstring($gd_image_array));
742 742
 }
743 743
 
744 744
 
@@ -757,24 +757,24 @@  discard block
 block discarded – undo
757 757
  *     - true si une image est bien retournée.
758 758
  */
759 759
 function _image_imagewebp($img, $fichier, $qualite = _IMG_GD_QUALITE) {
760
-	if (!function_exists('imagewebp')) {
761
-		return false;
762
-	}
763
-	$tmp = $fichier . ".tmp";
764
-	$ret = imagewebp($img, $tmp, $qualite);
765
-	if (file_exists($tmp)) {
766
-		$taille_test = getimagesize($tmp);
767
-		if ($taille_test[0] < 1) {
768
-			return false;
769
-		}
770
-
771
-		spip_unlink($fichier); // le fichier peut deja exister
772
-		@rename($tmp, $fichier);
773
-
774
-		return $ret;
775
-	}
776
-
777
-	return false;
760
+    if (!function_exists('imagewebp')) {
761
+        return false;
762
+    }
763
+    $tmp = $fichier . ".tmp";
764
+    $ret = imagewebp($img, $tmp, $qualite);
765
+    if (file_exists($tmp)) {
766
+        $taille_test = getimagesize($tmp);
767
+        if ($taille_test[0] < 1) {
768
+            return false;
769
+        }
770
+
771
+        spip_unlink($fichier); // le fichier peut deja exister
772
+        @rename($tmp, $fichier);
773
+
774
+        return $ret;
775
+    }
776
+
777
+    return false;
778 778
 }
779 779
 
780 780
 /**
@@ -794,35 +794,35 @@  discard block
 block discarded – undo
794 794
  */
795 795
 function _image_imagesvg($img, $fichier) {
796 796
 
797
-	$tmp = $fichier . ".tmp";
798
-	if (strpos($img, "<") === false) {
799
-		$img = supprimer_timestamp($img);
800
-		if (!file_exists($img)) {
801
-			return false;
802
-		}
803
-		@copy($img, $tmp);
804
-		if (filesize($tmp) == filesize($img)) {
805
-			spip_unlink($fichier); // le fichier peut deja exister
806
-			@rename($tmp, $fichier);
807
-			return true;
808
-		}
809
-		return false;
810
-	}
811
-
812
-	file_put_contents($tmp, $img);
813
-	if (file_exists($tmp)) {
814
-		$taille_test = spip_getimagesize($tmp);
815
-		if ($taille_test[0] < 1) {
816
-			return false;
817
-		}
818
-
819
-		spip_unlink($fichier); // le fichier peut deja exister
820
-		@rename($tmp, $fichier);
821
-
822
-		return true;
823
-	}
824
-
825
-	return false;
797
+    $tmp = $fichier . ".tmp";
798
+    if (strpos($img, "<") === false) {
799
+        $img = supprimer_timestamp($img);
800
+        if (!file_exists($img)) {
801
+            return false;
802
+        }
803
+        @copy($img, $tmp);
804
+        if (filesize($tmp) == filesize($img)) {
805
+            spip_unlink($fichier); // le fichier peut deja exister
806
+            @rename($tmp, $fichier);
807
+            return true;
808
+        }
809
+        return false;
810
+    }
811
+
812
+    file_put_contents($tmp, $img);
813
+    if (file_exists($tmp)) {
814
+        $taille_test = spip_getimagesize($tmp);
815
+        if ($taille_test[0] < 1) {
816
+            return false;
817
+        }
818
+
819
+        spip_unlink($fichier); // le fichier peut deja exister
820
+        @rename($tmp, $fichier);
821
+
822
+        return true;
823
+    }
824
+
825
+    return false;
826 826
 }
827 827
 
828 828
 
@@ -850,29 +850,29 @@  discard block
 block discarded – undo
850 850
  *     - false sinon.
851 851
  */
852 852
 function _image_gd_output($img, $valeurs, $qualite = _IMG_GD_QUALITE, $fonction = null) {
853
-	if (is_null($fonction)) {
854
-		$fonction = "_image_image" . $valeurs['format_dest'];
855
-	}
856
-	$ret = false;
857
-	#un flag pour reperer les images gravees
858
-	$lock =
859
-		!statut_effacer_images_temporaires('get') // si la fonction n'a pas ete activee, on grave tout
860
-	or (@file_exists($valeurs['fichier_dest']) and !@file_exists($valeurs['fichier_dest'] . '.src'));
861
-	if (
862
-		function_exists($fonction)
863
-		&& ($ret = $fonction($img, $valeurs['fichier_dest'], $qualite)) # on a reussi a creer l'image
864
-		&& isset($valeurs['reconstruction']) # et on sait comment la resonctruire le cas echeant
865
-		&& !$lock
866
-	) {
867
-		if (@file_exists($valeurs['fichier_dest'])) {
868
-			// dans tous les cas mettre a jour la taille de l'image finale
869
-			list($valeurs["hauteur_dest"], $valeurs["largeur_dest"]) = taille_image($valeurs['fichier_dest']);
870
-			$valeurs['date'] = @filemtime($valeurs['fichier_dest']); // pour la retrouver apres disparition
871
-			ecrire_fichier($valeurs['fichier_dest'] . '.src', serialize($valeurs), true);
872
-		}
873
-	}
874
-
875
-	return $ret;
853
+    if (is_null($fonction)) {
854
+        $fonction = "_image_image" . $valeurs['format_dest'];
855
+    }
856
+    $ret = false;
857
+    #un flag pour reperer les images gravees
858
+    $lock =
859
+        !statut_effacer_images_temporaires('get') // si la fonction n'a pas ete activee, on grave tout
860
+    or (@file_exists($valeurs['fichier_dest']) and !@file_exists($valeurs['fichier_dest'] . '.src'));
861
+    if (
862
+        function_exists($fonction)
863
+        && ($ret = $fonction($img, $valeurs['fichier_dest'], $qualite)) # on a reussi a creer l'image
864
+        && isset($valeurs['reconstruction']) # et on sait comment la resonctruire le cas echeant
865
+        && !$lock
866
+    ) {
867
+        if (@file_exists($valeurs['fichier_dest'])) {
868
+            // dans tous les cas mettre a jour la taille de l'image finale
869
+            list($valeurs["hauteur_dest"], $valeurs["largeur_dest"]) = taille_image($valeurs['fichier_dest']);
870
+            $valeurs['date'] = @filemtime($valeurs['fichier_dest']); // pour la retrouver apres disparition
871
+            ecrire_fichier($valeurs['fichier_dest'] . '.src', serialize($valeurs), true);
872
+        }
873
+    }
874
+
875
+    return $ret;
876 876
 }
877 877
 
878 878
 /**
@@ -885,26 +885,26 @@  discard block
 block discarded – undo
885 885
  *     Chemin vers le fichier manquant
886 886
  **/
887 887
 function reconstruire_image_intermediaire($fichier_manquant) {
888
-	$reconstruire = array();
889
-	$fichier = $fichier_manquant;
890
-	while (strpos($fichier,"://")===false
891
-		and !@file_exists($fichier)
892
-		and lire_fichier($src = "$fichier.src", $source)
893
-		and $valeurs = unserialize($source)
894
-		and ($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
895
-	) {
896
-		spip_unlink($src); // si jamais on a un timeout pendant la reconstruction, elle se fera naturellement au hit suivant
897
-		$reconstruire[] = $valeurs['reconstruction'];
898
-	}
899
-	while (count($reconstruire)) {
900
-		$r = array_pop($reconstruire);
901
-		$fonction = $r[0];
902
-		$args = $r[1];
903
-		call_user_func_array($fonction, $args);
904
-	}
905
-	// cette image intermediaire est commune a plusieurs series de filtre, il faut la conserver
906
-	// mais l'on peut nettoyer les miettes de sa creation
907
-	ramasse_miettes($fichier_manquant);
888
+    $reconstruire = array();
889
+    $fichier = $fichier_manquant;
890
+    while (strpos($fichier,"://")===false
891
+        and !@file_exists($fichier)
892
+        and lire_fichier($src = "$fichier.src", $source)
893
+        and $valeurs = unserialize($source)
894
+        and ($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
895
+    ) {
896
+        spip_unlink($src); // si jamais on a un timeout pendant la reconstruction, elle se fera naturellement au hit suivant
897
+        $reconstruire[] = $valeurs['reconstruction'];
898
+    }
899
+    while (count($reconstruire)) {
900
+        $r = array_pop($reconstruire);
901
+        $fonction = $r[0];
902
+        $args = $r[1];
903
+        call_user_func_array($fonction, $args);
904
+    }
905
+    // cette image intermediaire est commune a plusieurs series de filtre, il faut la conserver
906
+    // mais l'on peut nettoyer les miettes de sa creation
907
+    ramasse_miettes($fichier_manquant);
908 908
 }
909 909
 
910 910
 /**
@@ -924,25 +924,25 @@  discard block
 block discarded – undo
924 924
  *     Chemin du fichier d'image calculé
925 925
  **/
926 926
 function ramasse_miettes($fichier) {
927
-	if (strpos($fichier,"://")!==false
928
-		or !lire_fichier($src = "$fichier.src", $source)
929
-		or !$valeurs = unserialize($source)
930
-	) {
931
-		return;
932
-	}
933
-	spip_unlink($src); # on supprime la reference a sa source pour marquer cette image comme non intermediaire
934
-	while (
935
-		($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
936
-		and (substr($fichier, 0, strlen(_DIR_VAR)) == _DIR_VAR) # et est dans local
937
-		and (lire_fichier($src = "$fichier.src",
938
-			$source)) # le fichier a une source connue (c'est donc une image calculee intermediaire)
939
-		and ($valeurs = unserialize($source))  # et valide
940
-	) {
941
-		# on efface le fichier
942
-		spip_unlink($fichier);
943
-		# mais laisse le .src qui permet de savoir comment reconstruire l'image si besoin
944
-		#spip_unlink($src);
945
-	}
927
+    if (strpos($fichier,"://")!==false
928
+        or !lire_fichier($src = "$fichier.src", $source)
929
+        or !$valeurs = unserialize($source)
930
+    ) {
931
+        return;
932
+    }
933
+    spip_unlink($src); # on supprime la reference a sa source pour marquer cette image comme non intermediaire
934
+    while (
935
+        ($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
936
+        and (substr($fichier, 0, strlen(_DIR_VAR)) == _DIR_VAR) # et est dans local
937
+        and (lire_fichier($src = "$fichier.src",
938
+            $source)) # le fichier a une source connue (c'est donc une image calculee intermediaire)
939
+        and ($valeurs = unserialize($source))  # et valide
940
+    ) {
941
+        # on efface le fichier
942
+        spip_unlink($fichier);
943
+        # mais laisse le .src qui permet de savoir comment reconstruire l'image si besoin
944
+        #spip_unlink($src);
945
+    }
946 946
 }
947 947
 
948 948
 
@@ -967,71 +967,71 @@  discard block
 block discarded – undo
967 967
  *     Code HTML de l'image
968 968
  **/
969 969
 function image_graver($img) {
970
-	// appeler le filtre post_image_filtrer qui permet de faire
971
-	// des traitements auto a la fin d'une serie de filtres
972
-	$img = pipeline('post_image_filtrer', $img);
973
-
974
-	$fichier_ori = $fichier = extraire_attribut($img, 'src');
975
-	if (($p = strpos($fichier, '?')) !== false) {
976
-		$fichier = substr($fichier, 0, $p);
977
-	}
978
-	if (strlen($fichier) < 1) {
979
-		$fichier = $img;
980
-	}
981
-	# si jamais le fichier final n'a pas ete calcule car suppose temporaire
982
-	# et qu'il ne s'agit pas d'une URL
983
-	if (strpos($fichier,"://")===false and !@file_exists($fichier)) {
984
-		reconstruire_image_intermediaire($fichier);
985
-	}
986
-	ramasse_miettes($fichier);
987
-
988
-	// ajouter le timestamp si besoin
989
-	if (strpos($fichier_ori, "?") === false) {
990
-		// on utilise str_replace pour attraper le onmouseover des logo si besoin
991
-		$img = str_replace($fichier_ori, timestamp($fichier_ori), $img);
992
-	}
993
-
994
-	return $img;
970
+    // appeler le filtre post_image_filtrer qui permet de faire
971
+    // des traitements auto a la fin d'une serie de filtres
972
+    $img = pipeline('post_image_filtrer', $img);
973
+
974
+    $fichier_ori = $fichier = extraire_attribut($img, 'src');
975
+    if (($p = strpos($fichier, '?')) !== false) {
976
+        $fichier = substr($fichier, 0, $p);
977
+    }
978
+    if (strlen($fichier) < 1) {
979
+        $fichier = $img;
980
+    }
981
+    # si jamais le fichier final n'a pas ete calcule car suppose temporaire
982
+    # et qu'il ne s'agit pas d'une URL
983
+    if (strpos($fichier,"://")===false and !@file_exists($fichier)) {
984
+        reconstruire_image_intermediaire($fichier);
985
+    }
986
+    ramasse_miettes($fichier);
987
+
988
+    // ajouter le timestamp si besoin
989
+    if (strpos($fichier_ori, "?") === false) {
990
+        // on utilise str_replace pour attraper le onmouseover des logo si besoin
991
+        $img = str_replace($fichier_ori, timestamp($fichier_ori), $img);
992
+    }
993
+
994
+    return $img;
995 995
 }
996 996
 
997 997
 
998 998
 if (!function_exists("imagepalettetotruecolor")) {
999
-	/**
1000
-	 * Transforme une image à palette indexée (256 couleurs max) en "vraies" couleurs RGB
1001
-	 *
1002
-	 * @note Pour compatibilité avec PHP < 5.5
1003
-	 *
1004
-	 * @link http://php.net/manual/fr/function.imagepalettetotruecolor.php
1005
-	 *
1006
-	 * @param ressource $img
1007
-	 * @return bool
1008
-	 *     - true si l'image est déjà en vrai RGB ou peut être transformée
1009
-	 *     - false si la transformation ne peut être faite.
1010
-	 **/
1011
-	function imagepalettetotruecolor(&$img) {
1012
-		if (!$img or !function_exists('imagecreatetruecolor')) {
1013
-			return false;
1014
-		} elseif (!imageistruecolor($img)) {
1015
-			$w = imagesx($img);
1016
-			$h = imagesy($img);
1017
-			$img1 = imagecreatetruecolor($w, $h);
1018
-			//Conserver la transparence si possible
1019
-			if (function_exists('ImageCopyResampled')) {
1020
-				if (function_exists("imageAntiAlias")) {
1021
-					imageAntiAlias($img1, true);
1022
-				}
1023
-				@imagealphablending($img1, false);
1024
-				@imagesavealpha($img1, true);
1025
-				@ImageCopyResampled($img1, $img, 0, 0, 0, 0, $w, $h, $w, $h);
1026
-			} else {
1027
-				imagecopy($img1, $img, 0, 0, 0, 0, $w, $h);
1028
-			}
1029
-
1030
-			$img = $img1;
1031
-		}
1032
-
1033
-		return true;
1034
-	}
999
+    /**
1000
+     * Transforme une image à palette indexée (256 couleurs max) en "vraies" couleurs RGB
1001
+     *
1002
+     * @note Pour compatibilité avec PHP < 5.5
1003
+     *
1004
+     * @link http://php.net/manual/fr/function.imagepalettetotruecolor.php
1005
+     *
1006
+     * @param ressource $img
1007
+     * @return bool
1008
+     *     - true si l'image est déjà en vrai RGB ou peut être transformée
1009
+     *     - false si la transformation ne peut être faite.
1010
+     **/
1011
+    function imagepalettetotruecolor(&$img) {
1012
+        if (!$img or !function_exists('imagecreatetruecolor')) {
1013
+            return false;
1014
+        } elseif (!imageistruecolor($img)) {
1015
+            $w = imagesx($img);
1016
+            $h = imagesy($img);
1017
+            $img1 = imagecreatetruecolor($w, $h);
1018
+            //Conserver la transparence si possible
1019
+            if (function_exists('ImageCopyResampled')) {
1020
+                if (function_exists("imageAntiAlias")) {
1021
+                    imageAntiAlias($img1, true);
1022
+                }
1023
+                @imagealphablending($img1, false);
1024
+                @imagesavealpha($img1, true);
1025
+                @ImageCopyResampled($img1, $img, 0, 0, 0, 0, $w, $h, $w, $h);
1026
+            } else {
1027
+                imagecopy($img1, $img, 0, 0, 0, 0, $w, $h);
1028
+            }
1029
+
1030
+            $img = $img1;
1031
+        }
1032
+
1033
+        return true;
1034
+    }
1035 1035
 }
1036 1036
 
1037 1037
 /**
@@ -1058,32 +1058,32 @@  discard block
 block discarded – undo
1058 1058
  *     Code html modifié de la balise.
1059 1059
  **/
1060 1060
 function _image_tag_changer_taille($tag, $width, $height, $style = false) {
1061
-	if ($style === false) {
1062
-		$style = extraire_attribut($tag, 'style');
1063
-	}
1064
-
1065
-	// enlever le width et height du style
1066
-	$style = preg_replace(",(^|;)\s*(width|height)\s*:\s*[^;]+,ims", "", $style);
1067
-	if ($style and $style[0] == ';') {
1068
-		$style = substr($style, 1);
1069
-	}
1070
-
1071
-	// mettre des attributs de width et height sur les images, 
1072
-	// ca accelere le rendu du navigateur
1073
-	// ca permet aux navigateurs de reserver la bonne taille 
1074
-	// quand on a desactive l'affichage des images.
1075
-	$tag = inserer_attribut($tag, 'width', round($width));
1076
-	$tag = inserer_attribut($tag, 'height', round($height));
1077
-
1078
-	// attributs deprecies. Transformer en CSS
1079
-	if ($espace = extraire_attribut($tag, 'hspace')) {
1080
-		$style = "margin:${espace}px;" . $style;
1081
-		$tag = inserer_attribut($tag, 'hspace', '');
1082
-	}
1083
-
1084
-	$tag = inserer_attribut($tag, 'style', $style, true, $style ? false : true);
1085
-
1086
-	return $tag;
1061
+    if ($style === false) {
1062
+        $style = extraire_attribut($tag, 'style');
1063
+    }
1064
+
1065
+    // enlever le width et height du style
1066
+    $style = preg_replace(",(^|;)\s*(width|height)\s*:\s*[^;]+,ims", "", $style);
1067
+    if ($style and $style[0] == ';') {
1068
+        $style = substr($style, 1);
1069
+    }
1070
+
1071
+    // mettre des attributs de width et height sur les images, 
1072
+    // ca accelere le rendu du navigateur
1073
+    // ca permet aux navigateurs de reserver la bonne taille 
1074
+    // quand on a desactive l'affichage des images.
1075
+    $tag = inserer_attribut($tag, 'width', round($width));
1076
+    $tag = inserer_attribut($tag, 'height', round($height));
1077
+
1078
+    // attributs deprecies. Transformer en CSS
1079
+    if ($espace = extraire_attribut($tag, 'hspace')) {
1080
+        $style = "margin:${espace}px;" . $style;
1081
+        $tag = inserer_attribut($tag, 'hspace', '');
1082
+    }
1083
+
1084
+    $tag = inserer_attribut($tag, 'style', $style, true, $style ? false : true);
1085
+
1086
+    return $tag;
1087 1087
 }
1088 1088
 
1089 1089
 
@@ -1109,71 +1109,71 @@  discard block
 block discarded – undo
1109 1109
  *     Retourne le code HTML de l'image
1110 1110
  **/
1111 1111
 function _image_ecrire_tag($valeurs, $surcharge = array()) {
1112
-	$valeurs = pipeline('image_ecrire_tag_preparer', $valeurs);
1113
-
1114
-	// fermer les tags img pas bien fermes;
1115
-	$tag = str_replace(">", "/>", str_replace("/>", ">", $valeurs['tag']));
1116
-
1117
-	// le style
1118
-	$style = $valeurs['style'];
1119
-	if (isset($surcharge['style'])) {
1120
-		$style = $surcharge['style'];
1121
-		unset($surcharge['style']);
1122
-	}
1123
-
1124
-	// traiter specifiquement la largeur et la hauteur
1125
-	$width = $valeurs['largeur'];
1126
-	if (isset($surcharge['width'])) {
1127
-		$width = $surcharge['width'];
1128
-		unset($surcharge['width']);
1129
-	}
1130
-	$height = $valeurs['hauteur'];
1131
-	if (isset($surcharge['height'])) {
1132
-		$height = $surcharge['height'];
1133
-		unset($surcharge['height']);
1134
-	}
1135
-
1136
-	$tag = _image_tag_changer_taille($tag, $width, $height, $style);
1137
-	// traiter specifiquement le src qui peut etre repris dans un onmouseout
1138
-	// on remplace toute les ref a src dans le tag
1139
-	$src = extraire_attribut($tag, 'src');
1140
-	if (isset($surcharge['src'])) {
1141
-		$tag = str_replace($src, $surcharge['src'], $tag);
1142
-		// si il y a des & dans src, alors ils peuvent provenir d'un &amp
1143
-		// pas garanti comme methode, mais mieux que rien
1144
-		if (strpos($src, '&') !== false) {
1145
-			$tag = str_replace(str_replace("&", "&amp;", $src), $surcharge['src'], $tag);
1146
-		}
1147
-		$src = $surcharge['src'];
1148
-		unset($surcharge['src']);
1149
-	}
1150
-
1151
-	$class = $valeurs['class'];
1152
-	if (isset($surcharge['class'])) {
1153
-		$class = $surcharge['class'];
1154
-		unset($surcharge['class']);
1155
-	}
1156
-	if (strlen($class)) {
1157
-		$tag = inserer_attribut($tag, 'class', $class);
1158
-	}
1159
-
1160
-	if (count($surcharge)) {
1161
-		foreach ($surcharge as $attribut => $valeur) {
1162
-			$tag = inserer_attribut($tag, $attribut, $valeur);
1163
-		}
1164
-	}
1165
-
1166
-	$tag = pipeline('image_ecrire_tag_finir',
1167
-		array(
1168
-			'args' => array(
1169
-				'valeurs' => $valeurs,
1170
-				'surcharge' => $surcharge,
1171
-			),
1172
-			'data' => $tag
1173
-		)
1174
-	);
1175
-
1176
-	return $tag;
1112
+    $valeurs = pipeline('image_ecrire_tag_preparer', $valeurs);
1113
+
1114
+    // fermer les tags img pas bien fermes;
1115
+    $tag = str_replace(">", "/>", str_replace("/>", ">", $valeurs['tag']));
1116
+
1117
+    // le style
1118
+    $style = $valeurs['style'];
1119
+    if (isset($surcharge['style'])) {
1120
+        $style = $surcharge['style'];
1121
+        unset($surcharge['style']);
1122
+    }
1123
+
1124
+    // traiter specifiquement la largeur et la hauteur
1125
+    $width = $valeurs['largeur'];
1126
+    if (isset($surcharge['width'])) {
1127
+        $width = $surcharge['width'];
1128
+        unset($surcharge['width']);
1129
+    }
1130
+    $height = $valeurs['hauteur'];
1131
+    if (isset($surcharge['height'])) {
1132
+        $height = $surcharge['height'];
1133
+        unset($surcharge['height']);
1134
+    }
1135
+
1136
+    $tag = _image_tag_changer_taille($tag, $width, $height, $style);
1137
+    // traiter specifiquement le src qui peut etre repris dans un onmouseout
1138
+    // on remplace toute les ref a src dans le tag
1139
+    $src = extraire_attribut($tag, 'src');
1140
+    if (isset($surcharge['src'])) {
1141
+        $tag = str_replace($src, $surcharge['src'], $tag);
1142
+        // si il y a des & dans src, alors ils peuvent provenir d'un &amp
1143
+        // pas garanti comme methode, mais mieux que rien
1144
+        if (strpos($src, '&') !== false) {
1145
+            $tag = str_replace(str_replace("&", "&amp;", $src), $surcharge['src'], $tag);
1146
+        }
1147
+        $src = $surcharge['src'];
1148
+        unset($surcharge['src']);
1149
+    }
1150
+
1151
+    $class = $valeurs['class'];
1152
+    if (isset($surcharge['class'])) {
1153
+        $class = $surcharge['class'];
1154
+        unset($surcharge['class']);
1155
+    }
1156
+    if (strlen($class)) {
1157
+        $tag = inserer_attribut($tag, 'class', $class);
1158
+    }
1159
+
1160
+    if (count($surcharge)) {
1161
+        foreach ($surcharge as $attribut => $valeur) {
1162
+            $tag = inserer_attribut($tag, $attribut, $valeur);
1163
+        }
1164
+    }
1165
+
1166
+    $tag = pipeline('image_ecrire_tag_finir',
1167
+        array(
1168
+            'args' => array(
1169
+                'valeurs' => $valeurs,
1170
+                'surcharge' => $surcharge,
1171
+            ),
1172
+            'data' => $tag
1173
+        )
1174
+    );
1175
+
1176
+    return $tag;
1177 1177
 }
1178 1178
 
1179 1179
 /**
@@ -1196,253 +1196,253 @@  discard block
 block discarded – undo
1196 1196
  *     Description de l'image, sinon null.
1197 1197
  **/
1198 1198
 function _image_creer_vignette($valeurs, $maxWidth, $maxHeight, $process = 'AUTO', $force = false) {
1199
-	// ordre de preference des formats graphiques pour creer les vignettes
1200
-	// le premier format disponible, selon la methode demandee, est utilise
1201
-	$image = $valeurs['fichier'];
1202
-	$format = $valeurs['format_source'];
1203
-	$destdir = dirname($valeurs['fichier_dest']);
1204
-	$destfile = basename($valeurs['fichier_dest'], "." . $valeurs["format_dest"]);
1205
-
1206
-	$format_sortie = $valeurs['format_dest'];
1207
-
1208
-	if (($process == 'AUTO') and isset($GLOBALS['meta']['image_process'])) {
1209
-		$process = $GLOBALS['meta']['image_process'];
1210
-	}
1211
-
1212
-	// si le doc n'est pas une image dans un format accetpable, refuser
1213
-	if (!$force and !in_array($format, formats_image_acceptables(in_array($process, ['gd1', 'gd2'])))) {
1214
-		return;
1215
-	}
1216
-	$destination = "$destdir/$destfile";
1217
-
1218
-	// calculer la taille
1219
-	if (($srcWidth = $valeurs['largeur']) && ($srcHeight = $valeurs['hauteur'])) {
1220
-		if (!($destWidth = $valeurs['largeur_dest']) || !($destHeight = $valeurs['hauteur_dest'])) {
1221
-			list($destWidth, $destHeight) = _image_ratio($valeurs['largeur'], $valeurs['hauteur'], $maxWidth, $maxHeight);
1222
-		}
1223
-	} elseif ($process == 'convert' or $process == 'imagick') {
1224
-		$destWidth = $maxWidth;
1225
-		$destHeight = $maxHeight;
1226
-	} else {
1227
-		spip_log("echec $process sur $image");
1228
-
1229
-		return;
1230
-	}
1231
-
1232
-	$vignette = '';
1233
-
1234
-	// Si l'image est de la taille demandee (ou plus petite), simplement la retourner
1235
-	if ($srcWidth and $srcWidth <= $maxWidth and $srcHeight <= $maxHeight) {
1236
-		$vignette = $destination . '.' . $format;
1237
-		@copy($image, $vignette);
1238
-	}
1239
-
1240
-	elseif ($valeurs["format_source"] === 'svg') {
1241
-		if ($svg = svg_redimensionner($valeurs['fichier'], $destWidth, $destHeight)){
1242
-			$format_sortie = 'svg';
1243
-			$vignette = $destination . "." . $format_sortie;
1244
-			$valeurs['fichier_dest'] = $vignette;
1245
-			_image_gd_output($svg, $valeurs);
1246
-		}
1247
-	}
1248
-
1249
-	// imagemagick en ligne de commande
1250
-	elseif ($process == 'convert') {
1251
-		if (!defined('_CONVERT_COMMAND')) {
1252
-			define('_CONVERT_COMMAND', 'convert');
1253
-		} // Securite : mes_options.php peut preciser le chemin absolu
1254
-		if (!defined('_RESIZE_COMMAND')) {
1255
-			define('_RESIZE_COMMAND', _CONVERT_COMMAND . ' -quality ' . _IMG_CONVERT_QUALITE . ' -resize %xx%y! %src %dest');
1256
-		}
1257
-		$vignette = $destination . "." . $format_sortie;
1258
-		$commande = str_replace(
1259
-			array('%x', '%y', '%src', '%dest'),
1260
-			array(
1261
-				$destWidth,
1262
-				$destHeight,
1263
-				escapeshellcmd($image),
1264
-				escapeshellcmd($vignette)
1265
-			),
1266
-			_RESIZE_COMMAND);
1267
-		spip_log($commande);
1268
-		exec($commande);
1269
-		if (!@file_exists($vignette)) {
1270
-			spip_log("echec convert sur $vignette");
1271
-
1272
-			return;  // echec commande
1273
-		}
1274
-	}
1275
-
1276
-	// php5 imagemagick
1277
-	elseif ($process == 'imagick') {
1278
-		$vignette = "$destination." . $format_sortie;
1279
-
1280
-		if (!class_exists('Imagick')) {
1281
-			spip_log("Classe Imagick absente !", _LOG_ERREUR);
1282
-
1283
-			return;
1284
-		}
1285
-		$imagick = new Imagick();
1286
-		$imagick->readImage($image);
1287
-		$imagick->resizeImage($destWidth, $destHeight, Imagick::FILTER_LANCZOS,
1288
-			1);//, IMAGICK_FILTER_LANCZOS, _IMG_IMAGICK_QUALITE / 100);
1289
-		$imagick->writeImage($vignette);
1290
-
1291
-		if (!@file_exists($vignette)) {
1292
-			spip_log("echec imagick sur $vignette");
1293
-
1294
-			return;
1295
-		}
1296
-	}
1297
-
1298
-	// netpbm
1299
-	elseif ($process == "netpbm") {
1300
-		if (!defined('_PNMSCALE_COMMAND')) {
1301
-			define('_PNMSCALE_COMMAND', 'pnmscale');
1302
-		} // Securite : mes_options.php peut preciser le chemin absolu
1303
-		if (_PNMSCALE_COMMAND == '') {
1304
-			return;
1305
-		}
1306
-		$vignette = $destination . "." . $format_sortie;
1307
-		$pnmtojpeg_command = str_replace("pnmscale", "pnmtojpeg", _PNMSCALE_COMMAND);
1308
-		if ($format == "jpg") {
1309
-
1310
-			$jpegtopnm_command = str_replace("pnmscale", "jpegtopnm", _PNMSCALE_COMMAND);
1311
-			exec("$jpegtopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1312
-			if (!($s = @filesize($vignette))) {
1313
-				spip_unlink($vignette);
1314
-			}
1315
-			if (!@file_exists($vignette)) {
1316
-				spip_log("echec netpbm-jpg sur $vignette");
1317
-
1318
-				return;
1319
-			}
1320
-		} else {
1321
-			if ($format == "gif") {
1322
-				$giftopnm_command = str_replace("pnmscale", "giftopnm", _PNMSCALE_COMMAND);
1323
-				exec("$giftopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1324
-				if (!($s = @filesize($vignette))) {
1325
-					spip_unlink($vignette);
1326
-				}
1327
-				if (!@file_exists($vignette)) {
1328
-					spip_log("echec netpbm-gif sur $vignette");
1329
-
1330
-					return;
1331
-				}
1332
-			} else {
1333
-				if ($format == "png") {
1334
-					$pngtopnm_command = str_replace("pnmscale", "pngtopnm", _PNMSCALE_COMMAND);
1335
-					exec("$pngtopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1336
-					if (!($s = @filesize($vignette))) {
1337
-						spip_unlink($vignette);
1338
-					}
1339
-					if (!@file_exists($vignette)) {
1340
-						spip_log("echec netpbm-png sur $vignette");
1341
-
1342
-						return;
1343
-					}
1344
-				}
1345
-			}
1346
-		}
1347
-	}
1348
-
1349
-	// gd ou gd2
1350
-	elseif ($process == 'gd1' or $process == 'gd2') {
1351
-		if (!function_exists('gd_info')) {
1352
-			spip_log("Librairie GD absente !", _LOG_ERREUR);
1353
-
1354
-			return;
1355
-		}
1356
-		if (_IMG_GD_MAX_PIXELS && $srcWidth * $srcHeight > _IMG_GD_MAX_PIXELS) {
1357
-			spip_log("vignette gd1/gd2 impossible : " . $srcWidth * $srcHeight . "pixels");
1358
-
1359
-			return;
1360
-		}
1361
-		$destFormat = $format_sortie;
1362
-		if (!$destFormat) {
1363
-			spip_log("pas de format pour $image");
1364
-
1365
-			return;
1366
-		}
1367
-
1368
-		$fonction_imagecreatefrom = $valeurs['fonction_imagecreatefrom'];
1369
-		if (!function_exists($fonction_imagecreatefrom)) {
1370
-			return '';
1371
-		}
1372
-		$srcImage = @$fonction_imagecreatefrom($image);
1373
-		if (!$srcImage) {
1374
-			spip_log("echec gd1/gd2");
1375
-
1376
-			return;
1377
-		}
1378
-
1379
-		// Initialisation de l'image destination
1380
-		$destImage = null;
1381
-		if ($process == 'gd2' and $destFormat != "gif") {
1382
-			$destImage = ImageCreateTrueColor($destWidth, $destHeight);
1383
-		}
1384
-		if (!$destImage) {
1385
-			$destImage = ImageCreate($destWidth, $destHeight);
1386
-		}
1387
-
1388
-		// Recopie de l'image d'origine avec adaptation de la taille 
1389
-		$ok = false;
1390
-		if (($process == 'gd2') and function_exists('ImageCopyResampled')) {
1391
-			if ($format == "gif") {
1392
-				// Si un GIF est transparent, 
1393
-				// fabriquer un PNG transparent  
1394
-				$transp = imagecolortransparent($srcImage);
1395
-				if ($transp > 0) {
1396
-					$destFormat = "png";
1397
-				}
1398
-			}
1399
-			if (in_array($destFormat, _image_extensions_conservent_transparence())) {
1400
-				// Conserver la transparence 
1401
-				if (function_exists("imageAntiAlias")) {
1402
-					imageAntiAlias($destImage, true);
1403
-				}
1404
-				@imagealphablending($destImage, false);
1405
-				@imagesavealpha($destImage, true);
1406
-			}
1407
-			$ok = @ImageCopyResampled($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
1408
-		}
1409
-		if (!$ok) {
1410
-			$ok = ImageCopyResized($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
1411
-		}
1412
-
1413
-		// Sauvegarde de l'image destination
1414
-		$valeurs['fichier_dest'] = $vignette = "$destination.$destFormat";
1415
-		$valeurs['format_dest'] = $format = $destFormat;
1416
-		_image_gd_output($destImage, $valeurs);
1417
-
1418
-		if ($srcImage) {
1419
-			ImageDestroy($srcImage);
1420
-		}
1421
-		ImageDestroy($destImage);
1422
-	}
1423
-
1424
-	if (!$vignette or !$size = @spip_getimagesize($vignette)) {
1425
-		$size = array($destWidth, $destHeight);
1426
-	}
1427
-
1428
-	// Gaffe: en safe mode, pas d'acces a la vignette,
1429
-	// donc risque de balancer "width='0'", ce qui masque l'image sous MSIE
1430
-	if ($size[0] < 1) {
1431
-		$size[0] = $destWidth;
1432
-	}
1433
-	if ($size[1] < 1) {
1434
-		$size[1] = $destHeight;
1435
-	}
1436
-
1437
-	$retour['width'] = $largeur = $size[0];
1438
-	$retour['height'] = $hauteur = $size[1];
1439
-
1440
-	$retour['fichier'] = $vignette;
1441
-	$retour['format'] = $format;
1442
-	$retour['date'] = @filemtime($vignette);
1443
-
1444
-	// renvoyer l'image
1445
-	return $retour;
1199
+    // ordre de preference des formats graphiques pour creer les vignettes
1200
+    // le premier format disponible, selon la methode demandee, est utilise
1201
+    $image = $valeurs['fichier'];
1202
+    $format = $valeurs['format_source'];
1203
+    $destdir = dirname($valeurs['fichier_dest']);
1204
+    $destfile = basename($valeurs['fichier_dest'], "." . $valeurs["format_dest"]);
1205
+
1206
+    $format_sortie = $valeurs['format_dest'];
1207
+
1208
+    if (($process == 'AUTO') and isset($GLOBALS['meta']['image_process'])) {
1209
+        $process = $GLOBALS['meta']['image_process'];
1210
+    }
1211
+
1212
+    // si le doc n'est pas une image dans un format accetpable, refuser
1213
+    if (!$force and !in_array($format, formats_image_acceptables(in_array($process, ['gd1', 'gd2'])))) {
1214
+        return;
1215
+    }
1216
+    $destination = "$destdir/$destfile";
1217
+
1218
+    // calculer la taille
1219
+    if (($srcWidth = $valeurs['largeur']) && ($srcHeight = $valeurs['hauteur'])) {
1220
+        if (!($destWidth = $valeurs['largeur_dest']) || !($destHeight = $valeurs['hauteur_dest'])) {
1221
+            list($destWidth, $destHeight) = _image_ratio($valeurs['largeur'], $valeurs['hauteur'], $maxWidth, $maxHeight);
1222
+        }
1223
+    } elseif ($process == 'convert' or $process == 'imagick') {
1224
+        $destWidth = $maxWidth;
1225
+        $destHeight = $maxHeight;
1226
+    } else {
1227
+        spip_log("echec $process sur $image");
1228
+
1229
+        return;
1230
+    }
1231
+
1232
+    $vignette = '';
1233
+
1234
+    // Si l'image est de la taille demandee (ou plus petite), simplement la retourner
1235
+    if ($srcWidth and $srcWidth <= $maxWidth and $srcHeight <= $maxHeight) {
1236
+        $vignette = $destination . '.' . $format;
1237
+        @copy($image, $vignette);
1238
+    }
1239
+
1240
+    elseif ($valeurs["format_source"] === 'svg') {
1241
+        if ($svg = svg_redimensionner($valeurs['fichier'], $destWidth, $destHeight)){
1242
+            $format_sortie = 'svg';
1243
+            $vignette = $destination . "." . $format_sortie;
1244
+            $valeurs['fichier_dest'] = $vignette;
1245
+            _image_gd_output($svg, $valeurs);
1246
+        }
1247
+    }
1248
+
1249
+    // imagemagick en ligne de commande
1250
+    elseif ($process == 'convert') {
1251
+        if (!defined('_CONVERT_COMMAND')) {
1252
+            define('_CONVERT_COMMAND', 'convert');
1253
+        } // Securite : mes_options.php peut preciser le chemin absolu
1254
+        if (!defined('_RESIZE_COMMAND')) {
1255
+            define('_RESIZE_COMMAND', _CONVERT_COMMAND . ' -quality ' . _IMG_CONVERT_QUALITE . ' -resize %xx%y! %src %dest');
1256
+        }
1257
+        $vignette = $destination . "." . $format_sortie;
1258
+        $commande = str_replace(
1259
+            array('%x', '%y', '%src', '%dest'),
1260
+            array(
1261
+                $destWidth,
1262
+                $destHeight,
1263
+                escapeshellcmd($image),
1264
+                escapeshellcmd($vignette)
1265
+            ),
1266
+            _RESIZE_COMMAND);
1267
+        spip_log($commande);
1268
+        exec($commande);
1269
+        if (!@file_exists($vignette)) {
1270
+            spip_log("echec convert sur $vignette");
1271
+
1272
+            return;  // echec commande
1273
+        }
1274
+    }
1275
+
1276
+    // php5 imagemagick
1277
+    elseif ($process == 'imagick') {
1278
+        $vignette = "$destination." . $format_sortie;
1279
+
1280
+        if (!class_exists('Imagick')) {
1281
+            spip_log("Classe Imagick absente !", _LOG_ERREUR);
1282
+
1283
+            return;
1284
+        }
1285
+        $imagick = new Imagick();
1286
+        $imagick->readImage($image);
1287
+        $imagick->resizeImage($destWidth, $destHeight, Imagick::FILTER_LANCZOS,
1288
+            1);//, IMAGICK_FILTER_LANCZOS, _IMG_IMAGICK_QUALITE / 100);
1289
+        $imagick->writeImage($vignette);
1290
+
1291
+        if (!@file_exists($vignette)) {
1292
+            spip_log("echec imagick sur $vignette");
1293
+
1294
+            return;
1295
+        }
1296
+    }
1297
+
1298
+    // netpbm
1299
+    elseif ($process == "netpbm") {
1300
+        if (!defined('_PNMSCALE_COMMAND')) {
1301
+            define('_PNMSCALE_COMMAND', 'pnmscale');
1302
+        } // Securite : mes_options.php peut preciser le chemin absolu
1303
+        if (_PNMSCALE_COMMAND == '') {
1304
+            return;
1305
+        }
1306
+        $vignette = $destination . "." . $format_sortie;
1307
+        $pnmtojpeg_command = str_replace("pnmscale", "pnmtojpeg", _PNMSCALE_COMMAND);
1308
+        if ($format == "jpg") {
1309
+
1310
+            $jpegtopnm_command = str_replace("pnmscale", "jpegtopnm", _PNMSCALE_COMMAND);
1311
+            exec("$jpegtopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1312
+            if (!($s = @filesize($vignette))) {
1313
+                spip_unlink($vignette);
1314
+            }
1315
+            if (!@file_exists($vignette)) {
1316
+                spip_log("echec netpbm-jpg sur $vignette");
1317
+
1318
+                return;
1319
+            }
1320
+        } else {
1321
+            if ($format == "gif") {
1322
+                $giftopnm_command = str_replace("pnmscale", "giftopnm", _PNMSCALE_COMMAND);
1323
+                exec("$giftopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1324
+                if (!($s = @filesize($vignette))) {
1325
+                    spip_unlink($vignette);
1326
+                }
1327
+                if (!@file_exists($vignette)) {
1328
+                    spip_log("echec netpbm-gif sur $vignette");
1329
+
1330
+                    return;
1331
+                }
1332
+            } else {
1333
+                if ($format == "png") {
1334
+                    $pngtopnm_command = str_replace("pnmscale", "pngtopnm", _PNMSCALE_COMMAND);
1335
+                    exec("$pngtopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1336
+                    if (!($s = @filesize($vignette))) {
1337
+                        spip_unlink($vignette);
1338
+                    }
1339
+                    if (!@file_exists($vignette)) {
1340
+                        spip_log("echec netpbm-png sur $vignette");
1341
+
1342
+                        return;
1343
+                    }
1344
+                }
1345
+            }
1346
+        }
1347
+    }
1348
+
1349
+    // gd ou gd2
1350
+    elseif ($process == 'gd1' or $process == 'gd2') {
1351
+        if (!function_exists('gd_info')) {
1352
+            spip_log("Librairie GD absente !", _LOG_ERREUR);
1353
+
1354
+            return;
1355
+        }
1356
+        if (_IMG_GD_MAX_PIXELS && $srcWidth * $srcHeight > _IMG_GD_MAX_PIXELS) {
1357
+            spip_log("vignette gd1/gd2 impossible : " . $srcWidth * $srcHeight . "pixels");
1358
+
1359
+            return;
1360
+        }
1361
+        $destFormat = $format_sortie;
1362
+        if (!$destFormat) {
1363
+            spip_log("pas de format pour $image");
1364
+
1365
+            return;
1366
+        }
1367
+
1368
+        $fonction_imagecreatefrom = $valeurs['fonction_imagecreatefrom'];
1369
+        if (!function_exists($fonction_imagecreatefrom)) {
1370
+            return '';
1371
+        }
1372
+        $srcImage = @$fonction_imagecreatefrom($image);
1373
+        if (!$srcImage) {
1374
+            spip_log("echec gd1/gd2");
1375
+
1376
+            return;
1377
+        }
1378
+
1379
+        // Initialisation de l'image destination
1380
+        $destImage = null;
1381
+        if ($process == 'gd2' and $destFormat != "gif") {
1382
+            $destImage = ImageCreateTrueColor($destWidth, $destHeight);
1383
+        }
1384
+        if (!$destImage) {
1385
+            $destImage = ImageCreate($destWidth, $destHeight);
1386
+        }
1387
+
1388
+        // Recopie de l'image d'origine avec adaptation de la taille 
1389
+        $ok = false;
1390
+        if (($process == 'gd2') and function_exists('ImageCopyResampled')) {
1391
+            if ($format == "gif") {
1392
+                // Si un GIF est transparent, 
1393
+                // fabriquer un PNG transparent  
1394
+                $transp = imagecolortransparent($srcImage);
1395
+                if ($transp > 0) {
1396
+                    $destFormat = "png";
1397
+                }
1398
+            }
1399
+            if (in_array($destFormat, _image_extensions_conservent_transparence())) {
1400
+                // Conserver la transparence 
1401
+                if (function_exists("imageAntiAlias")) {
1402
+                    imageAntiAlias($destImage, true);
1403
+                }
1404
+                @imagealphablending($destImage, false);
1405
+                @imagesavealpha($destImage, true);
1406
+            }
1407
+            $ok = @ImageCopyResampled($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
1408
+        }
1409
+        if (!$ok) {
1410
+            $ok = ImageCopyResized($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
1411
+        }
1412
+
1413
+        // Sauvegarde de l'image destination
1414
+        $valeurs['fichier_dest'] = $vignette = "$destination.$destFormat";
1415
+        $valeurs['format_dest'] = $format = $destFormat;
1416
+        _image_gd_output($destImage, $valeurs);
1417
+
1418
+        if ($srcImage) {
1419
+            ImageDestroy($srcImage);
1420
+        }
1421
+        ImageDestroy($destImage);
1422
+    }
1423
+
1424
+    if (!$vignette or !$size = @spip_getimagesize($vignette)) {
1425
+        $size = array($destWidth, $destHeight);
1426
+    }
1427
+
1428
+    // Gaffe: en safe mode, pas d'acces a la vignette,
1429
+    // donc risque de balancer "width='0'", ce qui masque l'image sous MSIE
1430
+    if ($size[0] < 1) {
1431
+        $size[0] = $destWidth;
1432
+    }
1433
+    if ($size[1] < 1) {
1434
+        $size[1] = $destHeight;
1435
+    }
1436
+
1437
+    $retour['width'] = $largeur = $size[0];
1438
+    $retour['height'] = $hauteur = $size[1];
1439
+
1440
+    $retour['fichier'] = $vignette;
1441
+    $retour['format'] = $format;
1442
+    $retour['date'] = @filemtime($vignette);
1443
+
1444
+    // renvoyer l'image
1445
+    return $retour;
1446 1446
 }
1447 1447
 
1448 1448
 /**
@@ -1462,25 +1462,25 @@  discard block
 block discarded – undo
1462 1462
  * @return array Liste [ largeur, hauteur, ratio de réduction ]
1463 1463
  **/
1464 1464
 function _image_ratio($srcWidth, $srcHeight, $maxWidth, $maxHeight) {
1465
-	$ratioWidth = $srcWidth / $maxWidth;
1466
-	$ratioHeight = $srcHeight / $maxHeight;
1467
-
1468
-	if ($srcWidth <= $maxWidth and $srcHeight <= $maxHeight) {
1469
-		$destWidth = $srcWidth;
1470
-		$destHeight = $srcHeight;
1471
-	} elseif ($ratioWidth < $ratioHeight) {
1472
-		$destWidth = $srcWidth / $ratioHeight;
1473
-		$destHeight = $maxHeight;
1474
-	} else {
1475
-		$destWidth = $maxWidth;
1476
-		$destHeight = $srcHeight / $ratioWidth;
1477
-	}
1478
-
1479
-	return array(
1480
-		intval(round($destWidth)),
1481
-		intval(round($destHeight)),
1482
-		max($ratioWidth, $ratioHeight)
1483
-	);
1465
+    $ratioWidth = $srcWidth / $maxWidth;
1466
+    $ratioHeight = $srcHeight / $maxHeight;
1467
+
1468
+    if ($srcWidth <= $maxWidth and $srcHeight <= $maxHeight) {
1469
+        $destWidth = $srcWidth;
1470
+        $destHeight = $srcHeight;
1471
+    } elseif ($ratioWidth < $ratioHeight) {
1472
+        $destWidth = $srcWidth / $ratioHeight;
1473
+        $destHeight = $maxHeight;
1474
+    } else {
1475
+        $destWidth = $maxWidth;
1476
+        $destHeight = $srcHeight / $ratioWidth;
1477
+    }
1478
+
1479
+    return array(
1480
+        intval(round($destWidth)),
1481
+        intval(round($destHeight)),
1482
+        max($ratioWidth, $ratioHeight)
1483
+    );
1484 1484
 }
1485 1485
 
1486 1486
 /**
@@ -1500,25 +1500,25 @@  discard block
 block discarded – undo
1500 1500
  * @return array Liste [ largeur, hauteur, ratio de réduction ]
1501 1501
  **/
1502 1502
 function ratio_passe_partout($srcWidth, $srcHeight, $maxWidth, $maxHeight) {
1503
-	$ratioWidth = $srcWidth / $maxWidth;
1504
-	$ratioHeight = $srcHeight / $maxHeight;
1505
-
1506
-	if ($srcWidth <= $maxWidth and $srcHeight <= $maxHeight) {
1507
-		$destWidth = $srcWidth;
1508
-		$destHeight = $srcHeight;
1509
-	} elseif ($ratioWidth > $ratioHeight) {
1510
-		$destWidth = $srcWidth / $ratioHeight;
1511
-		$destHeight = $maxHeight;
1512
-	} else {
1513
-		$destWidth = $maxWidth;
1514
-		$destHeight = $srcHeight / $ratioWidth;
1515
-	}
1516
-
1517
-	return array(
1518
-		intval(round($destWidth)),
1519
-		intval(round($destHeight)),
1520
-		min($ratioWidth, $ratioHeight)
1521
-	);
1503
+    $ratioWidth = $srcWidth / $maxWidth;
1504
+    $ratioHeight = $srcHeight / $maxHeight;
1505
+
1506
+    if ($srcWidth <= $maxWidth and $srcHeight <= $maxHeight) {
1507
+        $destWidth = $srcWidth;
1508
+        $destHeight = $srcHeight;
1509
+    } elseif ($ratioWidth > $ratioHeight) {
1510
+        $destWidth = $srcWidth / $ratioHeight;
1511
+        $destHeight = $maxHeight;
1512
+    } else {
1513
+        $destWidth = $maxWidth;
1514
+        $destHeight = $srcHeight / $ratioWidth;
1515
+    }
1516
+
1517
+    return array(
1518
+        intval(round($destWidth)),
1519
+        intval(round($destHeight)),
1520
+        min($ratioWidth, $ratioHeight)
1521
+    );
1522 1522
 }
1523 1523
 
1524 1524
 
@@ -1531,12 +1531,12 @@  discard block
 block discarded – undo
1531 1531
  * @return string
1532 1532
  */
1533 1533
 function process_image_svg_identite($image) {
1534
-	if ($image['creer']) {
1535
-		$source = $image['fichier'];
1536
-		_image_gd_output($source, $image);
1537
-	}
1534
+    if ($image['creer']) {
1535
+        $source = $image['fichier'];
1536
+        _image_gd_output($source, $image);
1537
+    }
1538 1538
 
1539
-	return _image_ecrire_tag($image, array('src' => $image['fichier_dest']));
1539
+    return _image_ecrire_tag($image, array('src' => $image['fichier_dest']));
1540 1540
 }
1541 1541
 
1542 1542
 
@@ -1569,104 +1569,104 @@  discard block
 block discarded – undo
1569 1569
  *     Code HTML de la balise img produite
1570 1570
  **/
1571 1571
 function process_image_reduire($fonction, $img, $taille, $taille_y, $force, $process = 'AUTO') {
1572
-	$image = false;
1573
-	if (($process == 'AUTO') and isset($GLOBALS['meta']['image_process'])) {
1574
-		$process = $GLOBALS['meta']['image_process'];
1575
-	}
1576
-	# determiner le format de sortie
1577
-	$format_sortie = false; // le choix par defaut sera bon
1578
-	if ($process == "netpbm") {
1579
-		$format_sortie = "jpg";
1580
-	} elseif ($process == 'gd1' or $process == 'gd2') {
1581
-		$image = _image_valeurs_trans($img, "reduire-{$taille}-{$taille_y}", $format_sortie, $fonction, false, _SVG_SUPPORTED);
1582
-		// on verifie que l'extension choisie est bonne (en principe oui)
1583
-		$gd_formats = formats_image_acceptables(true);
1584
-		if (is_array($image)
1585
-			and (!in_array($image['format_dest'], $gd_formats)
1586
-				or (!in_array($image['format_dest'], _image_extensions_acceptees_en_sortie()))
1587
-			)
1588
-		) {
1589
-			if ($image['format_source'] == 'jpg') {
1590
-				$formats_sortie = array('jpg', 'png', 'gif');
1591
-			} else // les gif sont passes en png preferentiellement pour etre homogene aux autres filtres images
1592
-			{
1593
-				$formats_sortie = array('png', 'jpg', 'gif');
1594
-			}
1595
-			// Choisir le format destination
1596
-			// - on sauve de preference en JPEG (meilleure compression)
1597
-			// - pour le GIF : les GD recentes peuvent le lire mais pas l'ecrire
1598
-			# bug : gd_formats contient la liste des fichiers qu'on sait *lire*,
1599
-			# pas *ecrire*
1600
-			$format_sortie = "";
1601
-			foreach ($formats_sortie as $fmt) {
1602
-				if (in_array($fmt, $gd_formats) and in_array($fmt, _image_extensions_acceptees_en_sortie())) {
1603
-					$format_sortie = $fmt;
1604
-					break;
1605
-				}
1606
-			}
1607
-			$image = false;
1608
-		}
1609
-	}
1610
-
1611
-	if (!is_array($image)) {
1612
-		$image = _image_valeurs_trans($img, "reduire-{$taille}-{$taille_y}", $format_sortie, $fonction, false, _SVG_SUPPORTED);
1613
-	}
1614
-
1615
-	if (!is_array($image) or !$image['largeur'] or !$image['hauteur']) {
1616
-		spip_log("image_reduire_src:pas de version locale de $img");
1617
-		// on peut resizer en mode html si on dispose des elements
1618
-		if ($srcw = extraire_attribut($img, 'width')
1619
-			and $srch = extraire_attribut($img, 'height')
1620
-		) {
1621
-			list($w, $h) = _image_ratio($srcw, $srch, $taille, $taille_y);
1622
-
1623
-			return _image_tag_changer_taille($img, $w, $h);
1624
-		}
1625
-		// la on n'a pas d'infos sur l'image source... on refile le truc a css
1626
-		// sous la forme style='max-width: NNpx;'
1627
-		return inserer_attribut($img, 'style',
1628
-			"max-width: ${taille}px; max-height: ${taille_y}px");
1629
-	}
1630
-
1631
-	// si l'image est plus petite que la cible retourner une copie cachee de l'image
1632
-	if (($image['largeur'] <= $taille) && ($image['hauteur'] <= $taille_y)) {
1633
-		if ($image['creer']) {
1634
-			@copy($image['fichier'], $image['fichier_dest']);
1635
-		}
1636
-
1637
-		return _image_ecrire_tag($image, array('src' => $image['fichier_dest']));
1638
-	}
1639
-
1640
-	if ($image['creer'] == false && !$force) {
1641
-		return _image_ecrire_tag($image,
1642
-			array('src' => $image['fichier_dest'], 'width' => $image['largeur_dest'], 'height' => $image['hauteur_dest']));
1643
-	}
1644
-
1645
-	if (in_array($image["format_source"], _image_extensions_acceptees_en_entree())) {
1646
-		$destWidth = $image['largeur_dest'];
1647
-		$destHeight = $image['hauteur_dest'];
1648
-		$logo = $image['fichier'];
1649
-		$date = $image["date_src"];
1650
-		$preview = _image_creer_vignette($image, $taille, $taille_y, $process, $force);
1651
-
1652
-		if ($preview && $preview['fichier']) {
1653
-			$logo = $preview['fichier'];
1654
-			$destWidth = $preview['width'];
1655
-			$destHeight = $preview['height'];
1656
-			$date = $preview['date'];
1657
-		}
1658
-		// dans l'espace prive mettre un timestamp sur l'adresse 
1659
-		// de l'image, de facon a tromper le cache du navigateur
1660
-		// quand on fait supprimer/reuploader un logo
1661
-		// (pas de filemtime si SAFE MODE)
1662
-		$date = test_espace_prive() ? ('?' . $date) : '';
1663
-
1664
-		return _image_ecrire_tag($image, array('src' => "$logo$date", 'width' => $destWidth, 'height' => $destHeight));
1665
-	}
1666
-	else {
1667
-		# BMP, tiff ... les redacteurs osent tout!
1668
-		return $img;
1669
-	}
1572
+    $image = false;
1573
+    if (($process == 'AUTO') and isset($GLOBALS['meta']['image_process'])) {
1574
+        $process = $GLOBALS['meta']['image_process'];
1575
+    }
1576
+    # determiner le format de sortie
1577
+    $format_sortie = false; // le choix par defaut sera bon
1578
+    if ($process == "netpbm") {
1579
+        $format_sortie = "jpg";
1580
+    } elseif ($process == 'gd1' or $process == 'gd2') {
1581
+        $image = _image_valeurs_trans($img, "reduire-{$taille}-{$taille_y}", $format_sortie, $fonction, false, _SVG_SUPPORTED);
1582
+        // on verifie que l'extension choisie est bonne (en principe oui)
1583
+        $gd_formats = formats_image_acceptables(true);
1584
+        if (is_array($image)
1585
+            and (!in_array($image['format_dest'], $gd_formats)
1586
+                or (!in_array($image['format_dest'], _image_extensions_acceptees_en_sortie()))
1587
+            )
1588
+        ) {
1589
+            if ($image['format_source'] == 'jpg') {
1590
+                $formats_sortie = array('jpg', 'png', 'gif');
1591
+            } else // les gif sont passes en png preferentiellement pour etre homogene aux autres filtres images
1592
+            {
1593
+                $formats_sortie = array('png', 'jpg', 'gif');
1594
+            }
1595
+            // Choisir le format destination
1596
+            // - on sauve de preference en JPEG (meilleure compression)
1597
+            // - pour le GIF : les GD recentes peuvent le lire mais pas l'ecrire
1598
+            # bug : gd_formats contient la liste des fichiers qu'on sait *lire*,
1599
+            # pas *ecrire*
1600
+            $format_sortie = "";
1601
+            foreach ($formats_sortie as $fmt) {
1602
+                if (in_array($fmt, $gd_formats) and in_array($fmt, _image_extensions_acceptees_en_sortie())) {
1603
+                    $format_sortie = $fmt;
1604
+                    break;
1605
+                }
1606
+            }
1607
+            $image = false;
1608
+        }
1609
+    }
1610
+
1611
+    if (!is_array($image)) {
1612
+        $image = _image_valeurs_trans($img, "reduire-{$taille}-{$taille_y}", $format_sortie, $fonction, false, _SVG_SUPPORTED);
1613
+    }
1614
+
1615
+    if (!is_array($image) or !$image['largeur'] or !$image['hauteur']) {
1616
+        spip_log("image_reduire_src:pas de version locale de $img");
1617
+        // on peut resizer en mode html si on dispose des elements
1618
+        if ($srcw = extraire_attribut($img, 'width')
1619
+            and $srch = extraire_attribut($img, 'height')
1620
+        ) {
1621
+            list($w, $h) = _image_ratio($srcw, $srch, $taille, $taille_y);
1622
+
1623
+            return _image_tag_changer_taille($img, $w, $h);
1624
+        }
1625
+        // la on n'a pas d'infos sur l'image source... on refile le truc a css
1626
+        // sous la forme style='max-width: NNpx;'
1627
+        return inserer_attribut($img, 'style',
1628
+            "max-width: ${taille}px; max-height: ${taille_y}px");
1629
+    }
1630
+
1631
+    // si l'image est plus petite que la cible retourner une copie cachee de l'image
1632
+    if (($image['largeur'] <= $taille) && ($image['hauteur'] <= $taille_y)) {
1633
+        if ($image['creer']) {
1634
+            @copy($image['fichier'], $image['fichier_dest']);
1635
+        }
1636
+
1637
+        return _image_ecrire_tag($image, array('src' => $image['fichier_dest']));
1638
+    }
1639
+
1640
+    if ($image['creer'] == false && !$force) {
1641
+        return _image_ecrire_tag($image,
1642
+            array('src' => $image['fichier_dest'], 'width' => $image['largeur_dest'], 'height' => $image['hauteur_dest']));
1643
+    }
1644
+
1645
+    if (in_array($image["format_source"], _image_extensions_acceptees_en_entree())) {
1646
+        $destWidth = $image['largeur_dest'];
1647
+        $destHeight = $image['hauteur_dest'];
1648
+        $logo = $image['fichier'];
1649
+        $date = $image["date_src"];
1650
+        $preview = _image_creer_vignette($image, $taille, $taille_y, $process, $force);
1651
+
1652
+        if ($preview && $preview['fichier']) {
1653
+            $logo = $preview['fichier'];
1654
+            $destWidth = $preview['width'];
1655
+            $destHeight = $preview['height'];
1656
+            $date = $preview['date'];
1657
+        }
1658
+        // dans l'espace prive mettre un timestamp sur l'adresse 
1659
+        // de l'image, de facon a tromper le cache du navigateur
1660
+        // quand on fait supprimer/reuploader un logo
1661
+        // (pas de filemtime si SAFE MODE)
1662
+        $date = test_espace_prive() ? ('?' . $date) : '';
1663
+
1664
+        return _image_ecrire_tag($image, array('src' => "$logo$date", 'width' => $destWidth, 'height' => $destHeight));
1665
+    }
1666
+    else {
1667
+        # BMP, tiff ... les redacteurs osent tout!
1668
+        return $img;
1669
+    }
1670 1670
 }
1671 1671
 
1672 1672
 /**
@@ -1681,144 +1681,144 @@  discard block
 block discarded – undo
1681 1681
  */
1682 1682
 class phpthumb_functions {
1683 1683
 
1684
-	/**
1685
-	 * Retourne la couleur d'un pixel dans une image
1686
-	 *
1687
-	 * @param ressource $img
1688
-	 * @param int $x
1689
-	 * @param int $y
1690
-	 * @return array|bool
1691
-	 */
1692
-	public static function GetPixelColor(&$img, $x, $y) {
1693
-		if (is_resource($img) || (is_object($img) && $img instanceof \GdImage)) {
1694
-			return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
1695
-		}
1696
-		return false;
1697
-	}
1698
-
1699
-	/**
1700
-	 * Retourne un nombre dans une représentation en Little Endian
1701
-	 *
1702
-	 * @param int $number
1703
-	 * @param int $minbytes
1704
-	 * @return string
1705
-	 */
1706
-	public static function LittleEndian2String($number, $minbytes = 1) {
1707
-		$intstring = '';
1708
-		while ($number > 0) {
1709
-			$intstring = $intstring . chr($number & 255);
1710
-			$number >>= 8;
1711
-		}
1712
-
1713
-		return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);
1714
-	}
1715
-
1716
-	/**
1717
-	 * Transforme une ressource GD en image au format ICO
1718
-	 *
1719
-	 * @param array $gd_image_array
1720
-	 *     Tableau de ressources d'images GD
1721
-	 * @return string
1722
-	 *     Image au format ICO
1723
-	 */
1724
-	public static function GD2ICOstring(&$gd_image_array) {
1725
-		foreach ($gd_image_array as $key => $gd_image) {
1726
-
1727
-			$ImageWidths[$key] = ImageSX($gd_image);
1728
-			$ImageHeights[$key] = ImageSY($gd_image);
1729
-			$bpp[$key] = ImageIsTrueColor($gd_image) ? 32 : 24;
1730
-			$totalcolors[$key] = ImageColorsTotal($gd_image);
1731
-
1732
-			$icXOR[$key] = '';
1733
-			for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) {
1734
-				for ($x = 0; $x < $ImageWidths[$key]; $x++) {
1735
-					$argb = phpthumb_functions::GetPixelColor($gd_image, $x, $y);
1736
-					$a = round(255 * ((127 - $argb['alpha']) / 127));
1737
-					$r = $argb['red'];
1738
-					$g = $argb['green'];
1739
-					$b = $argb['blue'];
1740
-
1741
-					if ($bpp[$key] == 32) {
1742
-						$icXOR[$key] .= chr($b) . chr($g) . chr($r) . chr($a);
1743
-					} elseif ($bpp[$key] == 24) {
1744
-						$icXOR[$key] .= chr($b) . chr($g) . chr($r);
1745
-					}
1746
-
1747
-					if ($a < 128) {
1748
-						@$icANDmask[$key][$y] .= '1';
1749
-					} else {
1750
-						@$icANDmask[$key][$y] .= '0';
1751
-					}
1752
-				}
1753
-				// mask bits are 32-bit aligned per scanline
1754
-				while (strlen($icANDmask[$key][$y]) % 32) {
1755
-					$icANDmask[$key][$y] .= '0';
1756
-				}
1757
-			}
1758
-			$icAND[$key] = '';
1759
-			foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {
1760
-				for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {
1761
-					$icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT)));
1762
-				}
1763
-			}
1764
-
1765
-		}
1766
-
1767
-		foreach ($gd_image_array as $key => $gd_image) {
1768
-			$biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);
1769
-
1770
-			// BITMAPINFOHEADER - 40 bytes
1771
-			$BitmapInfoHeader[$key] = '';
1772
-			$BitmapInfoHeader[$key] .= "\x28\x00\x00\x00";                // DWORD  biSize;
1773
-			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageWidths[$key], 4);    // LONG   biWidth;
1774
-			// The biHeight member specifies the combined
1775
-			// height of the XOR and AND masks.
1776
-			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG   biHeight;
1777
-			$BitmapInfoHeader[$key] .= "\x01\x00";                    // WORD   biPlanes;
1778
-			$BitmapInfoHeader[$key] .= chr($bpp[$key]) . "\x00";              // wBitCount;
1779
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biCompression;
1780
-			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($biSizeImage, 4);      // DWORD  biSizeImage;
1781
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // LONG   biXPelsPerMeter;
1782
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // LONG   biYPelsPerMeter;
1783
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biClrUsed;
1784
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biClrImportant;
1785
-		}
1786
-
1787
-
1788
-		$icondata = "\x00\x00";                    // idReserved;   // Reserved (must be 0)
1789
-		$icondata .= "\x01\x00";                    // idType;	   // Resource Type (1 for icons)
1790
-		$icondata .= phpthumb_functions::LittleEndian2String(count($gd_image_array), 2);  // idCount;	  // How many images?
1791
-
1792
-		$dwImageOffset = 6 + (count($gd_image_array) * 16);
1793
-		foreach ($gd_image_array as $key => $gd_image) {
1794
-			// ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
1795
-
1796
-			$icondata .= chr($ImageWidths[$key]);           // bWidth;		  // Width, in pixels, of the image
1797
-			$icondata .= chr($ImageHeights[$key]);          // bHeight;		 // Height, in pixels, of the image
1798
-			$icondata .= chr($totalcolors[$key]);           // bColorCount;	 // Number of colors in image (0 if >=8bpp)
1799
-			$icondata .= "\x00";                    // bReserved;	   // Reserved ( must be 0)
1800
-
1801
-			$icondata .= "\x01\x00";                  // wPlanes;		 // Color Planes
1802
-			$icondata .= chr($bpp[$key]) . "\x00";            // wBitCount;	   // Bits per pixel
1803
-
1804
-			$dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
1805
-			$icondata .= phpthumb_functions::LittleEndian2String($dwBytesInRes,
1806
-				4);     // dwBytesInRes;	// How many bytes in this resource?
1807
-
1808
-			$icondata .= phpthumb_functions::LittleEndian2String($dwImageOffset,
1809
-				4);    // dwImageOffset;   // Where in the file is this image?
1810
-			$dwImageOffset += strlen($BitmapInfoHeader[$key]);
1811
-			$dwImageOffset += strlen($icXOR[$key]);
1812
-			$dwImageOffset += strlen($icAND[$key]);
1813
-		}
1814
-
1815
-		foreach ($gd_image_array as $key => $gd_image) {
1816
-			$icondata .= $BitmapInfoHeader[$key];
1817
-			$icondata .= $icXOR[$key];
1818
-			$icondata .= $icAND[$key];
1819
-		}
1820
-
1821
-		return $icondata;
1822
-	}
1684
+    /**
1685
+     * Retourne la couleur d'un pixel dans une image
1686
+     *
1687
+     * @param ressource $img
1688
+     * @param int $x
1689
+     * @param int $y
1690
+     * @return array|bool
1691
+     */
1692
+    public static function GetPixelColor(&$img, $x, $y) {
1693
+        if (is_resource($img) || (is_object($img) && $img instanceof \GdImage)) {
1694
+            return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
1695
+        }
1696
+        return false;
1697
+    }
1698
+
1699
+    /**
1700
+     * Retourne un nombre dans une représentation en Little Endian
1701
+     *
1702
+     * @param int $number
1703
+     * @param int $minbytes
1704
+     * @return string
1705
+     */
1706
+    public static function LittleEndian2String($number, $minbytes = 1) {
1707
+        $intstring = '';
1708
+        while ($number > 0) {
1709
+            $intstring = $intstring . chr($number & 255);
1710
+            $number >>= 8;
1711
+        }
1712
+
1713
+        return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);
1714
+    }
1715
+
1716
+    /**
1717
+     * Transforme une ressource GD en image au format ICO
1718
+     *
1719
+     * @param array $gd_image_array
1720
+     *     Tableau de ressources d'images GD
1721
+     * @return string
1722
+     *     Image au format ICO
1723
+     */
1724
+    public static function GD2ICOstring(&$gd_image_array) {
1725
+        foreach ($gd_image_array as $key => $gd_image) {
1726
+
1727
+            $ImageWidths[$key] = ImageSX($gd_image);
1728
+            $ImageHeights[$key] = ImageSY($gd_image);
1729
+            $bpp[$key] = ImageIsTrueColor($gd_image) ? 32 : 24;
1730
+            $totalcolors[$key] = ImageColorsTotal($gd_image);
1731
+
1732
+            $icXOR[$key] = '';
1733
+            for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) {
1734
+                for ($x = 0; $x < $ImageWidths[$key]; $x++) {
1735
+                    $argb = phpthumb_functions::GetPixelColor($gd_image, $x, $y);
1736
+                    $a = round(255 * ((127 - $argb['alpha']) / 127));
1737
+                    $r = $argb['red'];
1738
+                    $g = $argb['green'];
1739
+                    $b = $argb['blue'];
1740
+
1741
+                    if ($bpp[$key] == 32) {
1742
+                        $icXOR[$key] .= chr($b) . chr($g) . chr($r) . chr($a);
1743
+                    } elseif ($bpp[$key] == 24) {
1744
+                        $icXOR[$key] .= chr($b) . chr($g) . chr($r);
1745
+                    }
1746
+
1747
+                    if ($a < 128) {
1748
+                        @$icANDmask[$key][$y] .= '1';
1749
+                    } else {
1750
+                        @$icANDmask[$key][$y] .= '0';
1751
+                    }
1752
+                }
1753
+                // mask bits are 32-bit aligned per scanline
1754
+                while (strlen($icANDmask[$key][$y]) % 32) {
1755
+                    $icANDmask[$key][$y] .= '0';
1756
+                }
1757
+            }
1758
+            $icAND[$key] = '';
1759
+            foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {
1760
+                for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {
1761
+                    $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT)));
1762
+                }
1763
+            }
1764
+
1765
+        }
1766
+
1767
+        foreach ($gd_image_array as $key => $gd_image) {
1768
+            $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);
1769
+
1770
+            // BITMAPINFOHEADER - 40 bytes
1771
+            $BitmapInfoHeader[$key] = '';
1772
+            $BitmapInfoHeader[$key] .= "\x28\x00\x00\x00";                // DWORD  biSize;
1773
+            $BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageWidths[$key], 4);    // LONG   biWidth;
1774
+            // The biHeight member specifies the combined
1775
+            // height of the XOR and AND masks.
1776
+            $BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG   biHeight;
1777
+            $BitmapInfoHeader[$key] .= "\x01\x00";                    // WORD   biPlanes;
1778
+            $BitmapInfoHeader[$key] .= chr($bpp[$key]) . "\x00";              // wBitCount;
1779
+            $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biCompression;
1780
+            $BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($biSizeImage, 4);      // DWORD  biSizeImage;
1781
+            $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // LONG   biXPelsPerMeter;
1782
+            $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // LONG   biYPelsPerMeter;
1783
+            $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biClrUsed;
1784
+            $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biClrImportant;
1785
+        }
1786
+
1787
+
1788
+        $icondata = "\x00\x00";                    // idReserved;   // Reserved (must be 0)
1789
+        $icondata .= "\x01\x00";                    // idType;	   // Resource Type (1 for icons)
1790
+        $icondata .= phpthumb_functions::LittleEndian2String(count($gd_image_array), 2);  // idCount;	  // How many images?
1791
+
1792
+        $dwImageOffset = 6 + (count($gd_image_array) * 16);
1793
+        foreach ($gd_image_array as $key => $gd_image) {
1794
+            // ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
1795
+
1796
+            $icondata .= chr($ImageWidths[$key]);           // bWidth;		  // Width, in pixels, of the image
1797
+            $icondata .= chr($ImageHeights[$key]);          // bHeight;		 // Height, in pixels, of the image
1798
+            $icondata .= chr($totalcolors[$key]);           // bColorCount;	 // Number of colors in image (0 if >=8bpp)
1799
+            $icondata .= "\x00";                    // bReserved;	   // Reserved ( must be 0)
1800
+
1801
+            $icondata .= "\x01\x00";                  // wPlanes;		 // Color Planes
1802
+            $icondata .= chr($bpp[$key]) . "\x00";            // wBitCount;	   // Bits per pixel
1803
+
1804
+            $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
1805
+            $icondata .= phpthumb_functions::LittleEndian2String($dwBytesInRes,
1806
+                4);     // dwBytesInRes;	// How many bytes in this resource?
1807
+
1808
+            $icondata .= phpthumb_functions::LittleEndian2String($dwImageOffset,
1809
+                4);    // dwImageOffset;   // Where in the file is this image?
1810
+            $dwImageOffset += strlen($BitmapInfoHeader[$key]);
1811
+            $dwImageOffset += strlen($icXOR[$key]);
1812
+            $dwImageOffset += strlen($icAND[$key]);
1813
+        }
1814
+
1815
+        foreach ($gd_image_array as $key => $gd_image) {
1816
+            $icondata .= $BitmapInfoHeader[$key];
1817
+            $icondata .= $icXOR[$key];
1818
+            $icondata .= $icAND[$key];
1819
+        }
1820
+
1821
+        return $icondata;
1822
+    }
1823 1823
 
1824 1824
 }
Please login to merge, or discard this patch.
Spacing   +70 added lines, -70 removed lines patch added patch discarded remove patch
@@ -44,13 +44,13 @@  discard block
 block discarded – undo
44 44
 	$blue = dechex($blue);
45 45
 
46 46
 	if (strlen($red) == 1) {
47
-		$red = "0" . $red;
47
+		$red = "0".$red;
48 48
 	}
49 49
 	if (strlen($green) == 1) {
50
-		$green = "0" . $green;
50
+		$green = "0".$green;
51 51
 	}
52 52
 	if (strlen($blue) == 1) {
53
-		$blue = "0" . $blue;
53
+		$blue = "0".$blue;
54 54
 	}
55 55
 
56 56
 	return "$red$green$blue";
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
 	$couleur = couleur_html_to_hex($couleur);
69 69
 	$couleur = ltrim($couleur, '#');
70 70
 	if (strlen($couleur) === 3) {
71
-		$couleur = $couleur[0] . $couleur[0] . $couleur[1] . $couleur[1] . $couleur[2] . $couleur[2];
71
+		$couleur = $couleur[0].$couleur[0].$couleur[1].$couleur[1].$couleur[2].$couleur[2];
72 72
 	}
73 73
 	$retour["red"] = hexdec(substr($couleur, 0, 2));
74 74
 	$retour["green"] = hexdec(substr($couleur, 2, 2));
@@ -162,7 +162,7 @@  discard block
 block discarded – undo
162 162
 	  and $extension = _image_trouver_extension_depuis_mime("image/".$regs[1])
163 163
 		and in_array($extension, _image_extensions_acceptees_en_entree())
164 164
 	) {
165
-		$local = sous_repertoire(_DIR_VAR, 'image-data') . md5($regs[2]) . '.' . _image_extension_normalisee($extension);
165
+		$local = sous_repertoire(_DIR_VAR, 'image-data').md5($regs[2]).'.'._image_extension_normalisee($extension);
166 166
 		if (!file_exists($local)) {
167 167
 			ecrire_fichier($local, base64_decode($regs[2]));
168 168
 		}
@@ -176,7 +176,7 @@  discard block
 block discarded – undo
176 176
 	// les protocoles web prennent au moins 3 lettres
177 177
 	if (tester_url_absolue($source)) {
178 178
 		include_spip('inc/distant');
179
-		$fichier = _DIR_RACINE . copie_locale($source);
179
+		$fichier = _DIR_RACINE.copie_locale($source);
180 180
 		if (!$fichier) {
181 181
 			return "";
182 182
 		}
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
 
202 202
 	if ($forcer_format !== false
203 203
 		// ignorer forcer_format si on a une image svg, que le filtre appelant ne supporte pas SVG, et que le forcage est un autre format image
204
-		and ($terminaison_dest !== 'svg' or $support_svg or !in_array($forcer_format,_image_extensions_acceptees_en_sortie()))) {
204
+		and ($terminaison_dest !== 'svg' or $support_svg or !in_array($forcer_format, _image_extensions_acceptees_en_sortie()))) {
205 205
 		$terminaison_dest = $forcer_format;
206 206
 	}
207 207
 
@@ -263,9 +263,9 @@  discard block
 block discarded – undo
263 263
 			// on garde la terminaison initiale car image simplement copiee
264 264
 			// et on postfixe son nom avec un md5 du path
265 265
 			$terminaison_dest = $terminaison;
266
-			$fichier_dest .= '-' . substr(md5("$identifiant"), 0, 5);
266
+			$fichier_dest .= '-'.substr(md5("$identifiant"), 0, 5);
267 267
 		} else {
268
-			$fichier_dest .= '-' . substr(md5("$identifiant-$effet"), 0, 5);
268
+			$fichier_dest .= '-'.substr(md5("$identifiant-$effet"), 0, 5);
269 269
 		}
270 270
 		$cache = sous_repertoire(_DIR_VAR, $cache);
271 271
 		$cache = sous_repertoire($cache, $effet);
@@ -276,7 +276,7 @@  discard block
 block discarded – undo
276 276
 		$fichier_dest = substr($fichier_dest, 2);
277 277
 	}
278 278
 
279
-	$fichier_dest = $cache . $fichier_dest . "." . $terminaison_dest;
279
+	$fichier_dest = $cache.$fichier_dest.".".$terminaison_dest;
280 280
 
281 281
 	$GLOBALS["images_calculees"][] = $fichier_dest;
282 282
 
@@ -312,14 +312,14 @@  discard block
 block discarded – undo
312 312
 	}
313 313
 
314 314
 	if ($creer) {
315
-		spip_log("filtre image " . ($fonction_creation ? reset($fonction_creation) : '') . "[$effet] sur $fichier",
316
-			"images" . _LOG_DEBUG);
315
+		spip_log("filtre image ".($fonction_creation ? reset($fonction_creation) : '')."[$effet] sur $fichier",
316
+			"images"._LOG_DEBUG);
317 317
 	}
318 318
 
319 319
 	$term_fonction = _image_trouver_extension_pertinente($fichier);
320
-	$ret["fonction_imagecreatefrom"] = "_imagecreatefrom" . $term_fonction;
320
+	$ret["fonction_imagecreatefrom"] = "_imagecreatefrom".$term_fonction;
321 321
 	$ret["fichier"] = $fichier;
322
-	$ret["fonction_image"] = "_image_image" . $terminaison_dest;
322
+	$ret["fonction_image"] = "_image_image".$terminaison_dest;
323 323
 	$ret["fichier_dest"] = $fichier_dest;
324 324
 	$ret["format_source"] = _image_extension_normalisee($terminaison);
325 325
 	$ret["format_dest"] = $terminaison_dest;
@@ -393,9 +393,9 @@  discard block
 block discarded – undo
393 393
 /**
394 394
  * @return array|string[]|null
395 395
  */
396
-function _image_extensions_acceptees_en_sortie(){
396
+function _image_extensions_acceptees_en_sortie() {
397 397
 	static $extensions = null;
398
-	if (empty($extensions)){
398
+	if (empty($extensions)) {
399 399
 		$extensions = _image_extensions_acceptees_en_entree();
400 400
 		$extensions = array_diff($extensions, ['jpeg']);
401 401
 		if (in_array('gif', $extensions) and !function_exists('imagegif')) {
@@ -409,7 +409,7 @@  discard block
 block discarded – undo
409 409
 	return $extensions;
410 410
 }
411 411
 
412
-function _image_extension_normalisee($extension){
412
+function _image_extension_normalisee($extension) {
413 413
 	$extension = strtolower($extension);
414 414
 	if ($extension === 'jpeg') {
415 415
 		$extension = 'jpg';
@@ -417,7 +417,7 @@  discard block
 block discarded – undo
417 417
 	return $extension;
418 418
 }
419 419
 
420
-function _image_extensions_conservent_transparence(){
420
+function _image_extensions_conservent_transparence() {
421 421
 	return ['png', 'webp'];
422 422
 }
423 423
 
@@ -467,7 +467,7 @@  discard block
 block discarded – undo
467 467
 
468 468
 	$_terminaison = _image_trouver_extension_depuis_mime($mime);
469 469
 	if ($_terminaison and $_terminaison !== $terminaison) {
470
-		spip_log("Mauvaise extension du fichier : $path . Son type mime est : $mime", "images." . _LOG_INFO_IMPORTANTE);
470
+		spip_log("Mauvaise extension du fichier : $path . Son type mime est : $mime", "images."._LOG_INFO_IMPORTANTE);
471 471
 		$terminaison = $_terminaison;
472 472
 	}
473 473
 	return $terminaison;
@@ -624,7 +624,7 @@  discard block
 block discarded – undo
624 624
 	if (!function_exists('imagepng')) {
625 625
 		return false;
626 626
 	}
627
-	$tmp = $fichier . ".tmp";
627
+	$tmp = $fichier.".tmp";
628 628
 	$ret = imagepng($img, $tmp);
629 629
 	if (file_exists($tmp)) {
630 630
 		$taille_test = getimagesize($tmp);
@@ -659,7 +659,7 @@  discard block
 block discarded – undo
659 659
 	if (!function_exists('imagegif')) {
660 660
 		return false;
661 661
 	}
662
-	$tmp = $fichier . ".tmp";
662
+	$tmp = $fichier.".tmp";
663 663
 	$ret = imagegif($img, $tmp);
664 664
 	if (file_exists($tmp)) {
665 665
 		$taille_test = getimagesize($tmp);
@@ -699,7 +699,7 @@  discard block
 block discarded – undo
699 699
 	if (!function_exists('imagejpeg')) {
700 700
 		return false;
701 701
 	}
702
-	$tmp = $fichier . ".tmp";
702
+	$tmp = $fichier.".tmp";
703 703
 
704 704
 	// Enable interlancing
705 705
 	imageinterlace($img, true);
@@ -760,7 +760,7 @@  discard block
 block discarded – undo
760 760
 	if (!function_exists('imagewebp')) {
761 761
 		return false;
762 762
 	}
763
-	$tmp = $fichier . ".tmp";
763
+	$tmp = $fichier.".tmp";
764 764
 	$ret = imagewebp($img, $tmp, $qualite);
765 765
 	if (file_exists($tmp)) {
766 766
 		$taille_test = getimagesize($tmp);
@@ -794,7 +794,7 @@  discard block
 block discarded – undo
794 794
  */
795 795
 function _image_imagesvg($img, $fichier) {
796 796
 
797
-	$tmp = $fichier . ".tmp";
797
+	$tmp = $fichier.".tmp";
798 798
 	if (strpos($img, "<") === false) {
799 799
 		$img = supprimer_timestamp($img);
800 800
 		if (!file_exists($img)) {
@@ -851,13 +851,13 @@  discard block
 block discarded – undo
851 851
  */
852 852
 function _image_gd_output($img, $valeurs, $qualite = _IMG_GD_QUALITE, $fonction = null) {
853 853
 	if (is_null($fonction)) {
854
-		$fonction = "_image_image" . $valeurs['format_dest'];
854
+		$fonction = "_image_image".$valeurs['format_dest'];
855 855
 	}
856 856
 	$ret = false;
857 857
 	#un flag pour reperer les images gravees
858 858
 	$lock =
859 859
 		!statut_effacer_images_temporaires('get') // si la fonction n'a pas ete activee, on grave tout
860
-	or (@file_exists($valeurs['fichier_dest']) and !@file_exists($valeurs['fichier_dest'] . '.src'));
860
+	or (@file_exists($valeurs['fichier_dest']) and !@file_exists($valeurs['fichier_dest'].'.src'));
861 861
 	if (
862 862
 		function_exists($fonction)
863 863
 		&& ($ret = $fonction($img, $valeurs['fichier_dest'], $qualite)) # on a reussi a creer l'image
@@ -868,7 +868,7 @@  discard block
 block discarded – undo
868 868
 			// dans tous les cas mettre a jour la taille de l'image finale
869 869
 			list($valeurs["hauteur_dest"], $valeurs["largeur_dest"]) = taille_image($valeurs['fichier_dest']);
870 870
 			$valeurs['date'] = @filemtime($valeurs['fichier_dest']); // pour la retrouver apres disparition
871
-			ecrire_fichier($valeurs['fichier_dest'] . '.src', serialize($valeurs), true);
871
+			ecrire_fichier($valeurs['fichier_dest'].'.src', serialize($valeurs), true);
872 872
 		}
873 873
 	}
874 874
 
@@ -887,7 +887,7 @@  discard block
 block discarded – undo
887 887
 function reconstruire_image_intermediaire($fichier_manquant) {
888 888
 	$reconstruire = array();
889 889
 	$fichier = $fichier_manquant;
890
-	while (strpos($fichier,"://")===false
890
+	while (strpos($fichier, "://") === false
891 891
 		and !@file_exists($fichier)
892 892
 		and lire_fichier($src = "$fichier.src", $source)
893 893
 		and $valeurs = unserialize($source)
@@ -924,7 +924,7 @@  discard block
 block discarded – undo
924 924
  *     Chemin du fichier d'image calculé
925 925
  **/
926 926
 function ramasse_miettes($fichier) {
927
-	if (strpos($fichier,"://")!==false
927
+	if (strpos($fichier, "://") !== false
928 928
 		or !lire_fichier($src = "$fichier.src", $source)
929 929
 		or !$valeurs = unserialize($source)
930 930
 	) {
@@ -980,7 +980,7 @@  discard block
 block discarded – undo
980 980
 	}
981 981
 	# si jamais le fichier final n'a pas ete calcule car suppose temporaire
982 982
 	# et qu'il ne s'agit pas d'une URL
983
-	if (strpos($fichier,"://")===false and !@file_exists($fichier)) {
983
+	if (strpos($fichier, "://") === false and !@file_exists($fichier)) {
984 984
 		reconstruire_image_intermediaire($fichier);
985 985
 	}
986 986
 	ramasse_miettes($fichier);
@@ -1077,7 +1077,7 @@  discard block
 block discarded – undo
1077 1077
 
1078 1078
 	// attributs deprecies. Transformer en CSS
1079 1079
 	if ($espace = extraire_attribut($tag, 'hspace')) {
1080
-		$style = "margin:${espace}px;" . $style;
1080
+		$style = "margin:${espace}px;".$style;
1081 1081
 		$tag = inserer_attribut($tag, 'hspace', '');
1082 1082
 	}
1083 1083
 
@@ -1201,7 +1201,7 @@  discard block
 block discarded – undo
1201 1201
 	$image = $valeurs['fichier'];
1202 1202
 	$format = $valeurs['format_source'];
1203 1203
 	$destdir = dirname($valeurs['fichier_dest']);
1204
-	$destfile = basename($valeurs['fichier_dest'], "." . $valeurs["format_dest"]);
1204
+	$destfile = basename($valeurs['fichier_dest'], ".".$valeurs["format_dest"]);
1205 1205
 
1206 1206
 	$format_sortie = $valeurs['format_dest'];
1207 1207
 
@@ -1233,14 +1233,14 @@  discard block
 block discarded – undo
1233 1233
 
1234 1234
 	// Si l'image est de la taille demandee (ou plus petite), simplement la retourner
1235 1235
 	if ($srcWidth and $srcWidth <= $maxWidth and $srcHeight <= $maxHeight) {
1236
-		$vignette = $destination . '.' . $format;
1236
+		$vignette = $destination.'.'.$format;
1237 1237
 		@copy($image, $vignette);
1238 1238
 	}
1239 1239
 
1240 1240
 	elseif ($valeurs["format_source"] === 'svg') {
1241
-		if ($svg = svg_redimensionner($valeurs['fichier'], $destWidth, $destHeight)){
1241
+		if ($svg = svg_redimensionner($valeurs['fichier'], $destWidth, $destHeight)) {
1242 1242
 			$format_sortie = 'svg';
1243
-			$vignette = $destination . "." . $format_sortie;
1243
+			$vignette = $destination.".".$format_sortie;
1244 1244
 			$valeurs['fichier_dest'] = $vignette;
1245 1245
 			_image_gd_output($svg, $valeurs);
1246 1246
 		}
@@ -1252,9 +1252,9 @@  discard block
 block discarded – undo
1252 1252
 			define('_CONVERT_COMMAND', 'convert');
1253 1253
 		} // Securite : mes_options.php peut preciser le chemin absolu
1254 1254
 		if (!defined('_RESIZE_COMMAND')) {
1255
-			define('_RESIZE_COMMAND', _CONVERT_COMMAND . ' -quality ' . _IMG_CONVERT_QUALITE . ' -resize %xx%y! %src %dest');
1255
+			define('_RESIZE_COMMAND', _CONVERT_COMMAND.' -quality '._IMG_CONVERT_QUALITE.' -resize %xx%y! %src %dest');
1256 1256
 		}
1257
-		$vignette = $destination . "." . $format_sortie;
1257
+		$vignette = $destination.".".$format_sortie;
1258 1258
 		$commande = str_replace(
1259 1259
 			array('%x', '%y', '%src', '%dest'),
1260 1260
 			array(
@@ -1269,13 +1269,13 @@  discard block
 block discarded – undo
1269 1269
 		if (!@file_exists($vignette)) {
1270 1270
 			spip_log("echec convert sur $vignette");
1271 1271
 
1272
-			return;  // echec commande
1272
+			return; // echec commande
1273 1273
 		}
1274 1274
 	}
1275 1275
 
1276 1276
 	// php5 imagemagick
1277 1277
 	elseif ($process == 'imagick') {
1278
-		$vignette = "$destination." . $format_sortie;
1278
+		$vignette = "$destination.".$format_sortie;
1279 1279
 
1280 1280
 		if (!class_exists('Imagick')) {
1281 1281
 			spip_log("Classe Imagick absente !", _LOG_ERREUR);
@@ -1285,7 +1285,7 @@  discard block
 block discarded – undo
1285 1285
 		$imagick = new Imagick();
1286 1286
 		$imagick->readImage($image);
1287 1287
 		$imagick->resizeImage($destWidth, $destHeight, Imagick::FILTER_LANCZOS,
1288
-			1);//, IMAGICK_FILTER_LANCZOS, _IMG_IMAGICK_QUALITE / 100);
1288
+			1); //, IMAGICK_FILTER_LANCZOS, _IMG_IMAGICK_QUALITE / 100);
1289 1289
 		$imagick->writeImage($vignette);
1290 1290
 
1291 1291
 		if (!@file_exists($vignette)) {
@@ -1303,12 +1303,12 @@  discard block
 block discarded – undo
1303 1303
 		if (_PNMSCALE_COMMAND == '') {
1304 1304
 			return;
1305 1305
 		}
1306
-		$vignette = $destination . "." . $format_sortie;
1306
+		$vignette = $destination.".".$format_sortie;
1307 1307
 		$pnmtojpeg_command = str_replace("pnmscale", "pnmtojpeg", _PNMSCALE_COMMAND);
1308 1308
 		if ($format == "jpg") {
1309 1309
 
1310 1310
 			$jpegtopnm_command = str_replace("pnmscale", "jpegtopnm", _PNMSCALE_COMMAND);
1311
-			exec("$jpegtopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1311
+			exec("$jpegtopnm_command $image | "._PNMSCALE_COMMAND." -width $destWidth | $pnmtojpeg_command > $vignette");
1312 1312
 			if (!($s = @filesize($vignette))) {
1313 1313
 				spip_unlink($vignette);
1314 1314
 			}
@@ -1320,7 +1320,7 @@  discard block
 block discarded – undo
1320 1320
 		} else {
1321 1321
 			if ($format == "gif") {
1322 1322
 				$giftopnm_command = str_replace("pnmscale", "giftopnm", _PNMSCALE_COMMAND);
1323
-				exec("$giftopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1323
+				exec("$giftopnm_command $image | "._PNMSCALE_COMMAND." -width $destWidth | $pnmtojpeg_command > $vignette");
1324 1324
 				if (!($s = @filesize($vignette))) {
1325 1325
 					spip_unlink($vignette);
1326 1326
 				}
@@ -1332,7 +1332,7 @@  discard block
 block discarded – undo
1332 1332
 			} else {
1333 1333
 				if ($format == "png") {
1334 1334
 					$pngtopnm_command = str_replace("pnmscale", "pngtopnm", _PNMSCALE_COMMAND);
1335
-					exec("$pngtopnm_command $image | " . _PNMSCALE_COMMAND . " -width $destWidth | $pnmtojpeg_command > $vignette");
1335
+					exec("$pngtopnm_command $image | "._PNMSCALE_COMMAND." -width $destWidth | $pnmtojpeg_command > $vignette");
1336 1336
 					if (!($s = @filesize($vignette))) {
1337 1337
 						spip_unlink($vignette);
1338 1338
 					}
@@ -1354,7 +1354,7 @@  discard block
 block discarded – undo
1354 1354
 			return;
1355 1355
 		}
1356 1356
 		if (_IMG_GD_MAX_PIXELS && $srcWidth * $srcHeight > _IMG_GD_MAX_PIXELS) {
1357
-			spip_log("vignette gd1/gd2 impossible : " . $srcWidth * $srcHeight . "pixels");
1357
+			spip_log("vignette gd1/gd2 impossible : ".$srcWidth * $srcHeight."pixels");
1358 1358
 
1359 1359
 			return;
1360 1360
 		}
@@ -1659,7 +1659,7 @@  discard block
 block discarded – undo
1659 1659
 		// de l'image, de facon a tromper le cache du navigateur
1660 1660
 		// quand on fait supprimer/reuploader un logo
1661 1661
 		// (pas de filemtime si SAFE MODE)
1662
-		$date = test_espace_prive() ? ('?' . $date) : '';
1662
+		$date = test_espace_prive() ? ('?'.$date) : '';
1663 1663
 
1664 1664
 		return _image_ecrire_tag($image, array('src' => "$logo$date", 'width' => $destWidth, 'height' => $destHeight));
1665 1665
 	}
@@ -1706,7 +1706,7 @@  discard block
 block discarded – undo
1706 1706
 	public static function LittleEndian2String($number, $minbytes = 1) {
1707 1707
 		$intstring = '';
1708 1708
 		while ($number > 0) {
1709
-			$intstring = $intstring . chr($number & 255);
1709
+			$intstring = $intstring.chr($number & 255);
1710 1710
 			$number >>= 8;
1711 1711
 		}
1712 1712
 
@@ -1739,9 +1739,9 @@  discard block
 block discarded – undo
1739 1739
 					$b = $argb['blue'];
1740 1740
 
1741 1741
 					if ($bpp[$key] == 32) {
1742
-						$icXOR[$key] .= chr($b) . chr($g) . chr($r) . chr($a);
1742
+						$icXOR[$key] .= chr($b).chr($g).chr($r).chr($a);
1743 1743
 					} elseif ($bpp[$key] == 24) {
1744
-						$icXOR[$key] .= chr($b) . chr($g) . chr($r);
1744
+						$icXOR[$key] .= chr($b).chr($g).chr($r);
1745 1745
 					}
1746 1746
 
1747 1747
 					if ($a < 128) {
@@ -1769,44 +1769,44 @@  discard block
 block discarded – undo
1769 1769
 
1770 1770
 			// BITMAPINFOHEADER - 40 bytes
1771 1771
 			$BitmapInfoHeader[$key] = '';
1772
-			$BitmapInfoHeader[$key] .= "\x28\x00\x00\x00";                // DWORD  biSize;
1773
-			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageWidths[$key], 4);    // LONG   biWidth;
1772
+			$BitmapInfoHeader[$key] .= "\x28\x00\x00\x00"; // DWORD  biSize;
1773
+			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageWidths[$key], 4); // LONG   biWidth;
1774 1774
 			// The biHeight member specifies the combined
1775 1775
 			// height of the XOR and AND masks.
1776 1776
 			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG   biHeight;
1777
-			$BitmapInfoHeader[$key] .= "\x01\x00";                    // WORD   biPlanes;
1778
-			$BitmapInfoHeader[$key] .= chr($bpp[$key]) . "\x00";              // wBitCount;
1779
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biCompression;
1780
-			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($biSizeImage, 4);      // DWORD  biSizeImage;
1781
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // LONG   biXPelsPerMeter;
1782
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // LONG   biYPelsPerMeter;
1783
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biClrUsed;
1784
-			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                // DWORD  biClrImportant;
1777
+			$BitmapInfoHeader[$key] .= "\x01\x00"; // WORD   biPlanes;
1778
+			$BitmapInfoHeader[$key] .= chr($bpp[$key])."\x00"; // wBitCount;
1779
+			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD  biCompression;
1780
+			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($biSizeImage, 4); // DWORD  biSizeImage;
1781
+			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // LONG   biXPelsPerMeter;
1782
+			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // LONG   biYPelsPerMeter;
1783
+			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD  biClrUsed;
1784
+			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD  biClrImportant;
1785 1785
 		}
1786 1786
 
1787 1787
 
1788
-		$icondata = "\x00\x00";                    // idReserved;   // Reserved (must be 0)
1789
-		$icondata .= "\x01\x00";                    // idType;	   // Resource Type (1 for icons)
1790
-		$icondata .= phpthumb_functions::LittleEndian2String(count($gd_image_array), 2);  // idCount;	  // How many images?
1788
+		$icondata = "\x00\x00"; // idReserved;   // Reserved (must be 0)
1789
+		$icondata .= "\x01\x00"; // idType;	   // Resource Type (1 for icons)
1790
+		$icondata .= phpthumb_functions::LittleEndian2String(count($gd_image_array), 2); // idCount;	  // How many images?
1791 1791
 
1792 1792
 		$dwImageOffset = 6 + (count($gd_image_array) * 16);
1793 1793
 		foreach ($gd_image_array as $key => $gd_image) {
1794 1794
 			// ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
1795 1795
 
1796
-			$icondata .= chr($ImageWidths[$key]);           // bWidth;		  // Width, in pixels, of the image
1797
-			$icondata .= chr($ImageHeights[$key]);          // bHeight;		 // Height, in pixels, of the image
1798
-			$icondata .= chr($totalcolors[$key]);           // bColorCount;	 // Number of colors in image (0 if >=8bpp)
1799
-			$icondata .= "\x00";                    // bReserved;	   // Reserved ( must be 0)
1796
+			$icondata .= chr($ImageWidths[$key]); // bWidth;		  // Width, in pixels, of the image
1797
+			$icondata .= chr($ImageHeights[$key]); // bHeight;		 // Height, in pixels, of the image
1798
+			$icondata .= chr($totalcolors[$key]); // bColorCount;	 // Number of colors in image (0 if >=8bpp)
1799
+			$icondata .= "\x00"; // bReserved;	   // Reserved ( must be 0)
1800 1800
 
1801
-			$icondata .= "\x01\x00";                  // wPlanes;		 // Color Planes
1802
-			$icondata .= chr($bpp[$key]) . "\x00";            // wBitCount;	   // Bits per pixel
1801
+			$icondata .= "\x01\x00"; // wPlanes;		 // Color Planes
1802
+			$icondata .= chr($bpp[$key])."\x00"; // wBitCount;	   // Bits per pixel
1803 1803
 
1804 1804
 			$dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
1805 1805
 			$icondata .= phpthumb_functions::LittleEndian2String($dwBytesInRes,
1806
-				4);     // dwBytesInRes;	// How many bytes in this resource?
1806
+				4); // dwBytesInRes;	// How many bytes in this resource?
1807 1807
 
1808 1808
 			$icondata .= phpthumb_functions::LittleEndian2String($dwImageOffset,
1809
-				4);    // dwImageOffset;   // Where in the file is this image?
1809
+				4); // dwImageOffset;   // Where in the file is this image?
1810 1810
 			$dwImageOffset += strlen($BitmapInfoHeader[$key]);
1811 1811
 			$dwImageOffset += strlen($icXOR[$key]);
1812 1812
 			$dwImageOffset += strlen($icAND[$key]);
Please login to merge, or discard this patch.