From e7b0daadb9b6e0538d85deaee139a004dbc198e1 Mon Sep 17 00:00:00 2001
From: davux <da@weeno.net>
Date: Mon, 15 Nov 2010 20:06:30 +0000
Subject: [PATCH] =?UTF-8?q?Permettre=20la=20surcharge=20de=20la=20qualit?=
 =?UTF-8?q?=C3=A9=20d'image=20lors=20des=20traitements?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

On définit 4 constantes qui représentent le pourcentage de qualité à
appliquer lors des traitements d'images :
 - _IMG_QUALITE
 - _IMG_GD_QUALITE (existait deja)
 - _IMG_CONVERT_QUALITE
 - _IMG_IMAGICK_QUALITE

Ainsi, il suffit de surcharger _IMG_QUALITE dans mes_options pour impacter
toutes les valeurs, mais il reste possible de les définir au cas par cas.

La valeur par défaut est 85, sauf pour convert qui utilise historiquement
une qualité de 75. Cette incohérence n'est pas documentée, alors on la
préserve en attendant de savoir si elle est volontaire ou non.
---
 ecrire/inc/filtres_images_lib_mini.php | 6 +++---
 ecrire/inc/utils.php                   | 8 +++++++-
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/ecrire/inc/filtres_images_lib_mini.php b/ecrire/inc/filtres_images_lib_mini.php
index ba4536affd..7dea39bdaa 100644
--- a/ecrire/inc/filtres_images_lib_mini.php
+++ b/ecrire/inc/filtres_images_lib_mini.php
@@ -532,7 +532,7 @@ function _image_creer_vignette($valeurs, $maxWidth, $maxHeight, $process='AUTO',
 		// imagemagick en ligne de commande
 		else if ($process == 'convert') {
 			define('_CONVERT_COMMAND', 'convert');
-			define ('_RESIZE_COMMAND', _CONVERT_COMMAND.' -quality 85 -resize %xx%y! %src %dest');
+			define ('_RESIZE_COMMAND', _CONVERT_COMMAND.' -quality '._IMG_CONVERT_QUALITE.' -resize %xx%y! %src %dest');
 			$vignette = $destination.".".$format_sortie;
 			$commande = str_replace(
 				array('%x', '%y', '%src', '%dest'),
@@ -555,7 +555,7 @@ function _image_creer_vignette($valeurs, $maxWidth, $maxHeight, $process='AUTO',
 		if ($process == 'imagick') {
 			$vignette = "$destination.".$format_sortie;
 			$handle = imagick_readimage($image);
-			imagick_resize($handle, $destWidth, $destHeight, IMAGICK_FILTER_LANCZOS, 0.75);
+			imagick_resize($handle, $destWidth, $destHeight, IMAGICK_FILTER_LANCZOS, _IMG_IMAGICK_QUALITE / 100);
 			imagick_write($handle, $vignette);
 			if (!@file_exists($vignette)) {
 				spip_log("echec imagick sur $vignette");
@@ -936,4 +936,4 @@ class phpthumb_functions {
 
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 61c36e2f27..ab5716e31f 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1409,6 +1409,13 @@ function spip_initialisation_suite() {
 	define('_IMG_MAX_WIDTH', 0); # largeur en pixels
 	define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
 
+	// Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite)
+        if (!defined('_IMG_QUALITE')) define('_IMG_QUALITE', 85); # valeur par defaut
+        if (!defined('_IMG_GD_QUALITE')) define('_IMG_GD_QUALITE', _IMG_QUALITE); # surcharge pour la lib GD
+        if (!defined('_IMG_CONVERT_QUALITE')) define('_IMG_CONVERT_QUALITE', _IMG_QUALITE); # surcharge pour imagick en ligne de commande
+	// Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE
+        if (!defined('_IMG_IMAGICK_QUALITE')) define('_IMG_IMAGICK_QUALITE', 75); # surcharge pour imagick en PHP
+
 	define('_COPIE_LOCALE_MAX_SIZE',16777216); // poids en octet
 
 	// qq chaines standard
@@ -1476,7 +1483,6 @@ function spip_initialisation_suite() {
 	# au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
 	# les configurations limitees en memoire ont un seuil plutot vers 1MPixel
 	define('_IMG_GD_MAX_PIXELS', (isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000)?$GLOBALS['meta']['max_taille_vignettes']:0);
-	define('_IMG_GD_QUALITE', 85);
 
 	@define('_MEMORY_LIMIT_MIN',10); // en Mo
 	// si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
-- 
GitLab