Valider c0c334fa rédigé par marcimat's avatar marcimat
Parcourir les fichiers

feat: Les images svg peuvent aussi être prévisualisées

Note: il faut que le mime type soit correctement trouvé pour le fichier svg
ce qui dépend parfois du fichier (ex: avec un UTF8 avec BOM, le mime type devient plain/text)
parent 1e2bbab1
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+51 −39
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -336,17 +336,31 @@ class CacheFichiers {
		}

		$source = $desc['tmp_name'];
		$type = $desc['type'];
		// enlever le charset éventuel
		[$mime_type] = explode(';', $desc['type']);
		$size = $desc['size'];

		if (
			strpos($type, 'image/') === 0
			and $size <= 10 * 1024 * 1024 // 10Mo max.
		) {
			// enlever le charset éventuel et obtenir l'extension.
			$_type = explode(';', substr($type, 6));
			$extension = reset($_type);
			if (in_array($extension, ['jpeg', 'png', 'gif', 'webp'])) {
		if (!str_starts_with($mime_type, 'image/')) {
			return false;
		}
		// 10Mo max.
		if ($size > 10 * 1024 * 1024) {
			return false;
		}

		// obtenir l'extension.
		$extension = substr($mime_type, 6);
		if ($extension === 'svg+xml') {
			// Les SVG ne perdront pas de poids, on n’envoie que les légers (< 10ko)
			if ($size > 10 * 1024) {
				return false;
			}
			$extension = 'svg';
		}
		if (!in_array($extension, ['jpeg', 'png', 'gif', 'webp', 'svg'])) {
			return false;
		}

		include_spip('inc/filtres');
		include_spip('inc/filtres_images_mini');
		// il faut l'extension dans le chemin pour les filtres d'images… pff
@@ -355,6 +369,7 @@ class CacheFichiers {
			self::debug('Image absente pour vignette : ' . $source);
			return false;
		}

		rename($source, $image = $source . '.' . $extension);
		$img = image_reduire($image, $width, $height);
		rename($image, $source);
@@ -368,7 +383,7 @@ class CacheFichiers {
		$width = extraire_attribut($img, 'width');
		$height = extraire_attribut($img, 'height');
		lire_fichier($src, $vignette);
				$vignette = 'data:image/' . $extension . ';base64,' . base64_encode($vignette);
		$vignette = 'data:' . $mime_type . ';base64,' . base64_encode($vignette);
		supprimer_fichier($src);

		return [
@@ -376,9 +391,6 @@ class CacheFichiers {
			'height' => $height,
			'data' => $vignette
		];
			}
		}

		return false;
	}
}