diff --git a/filtres/images_transforme.php b/filtres/images_transforme.php index 16e58a6910e0d0b1a3b1e08bf6f3033a1f410c6c..3dc9c6788a5c916eea0fb9a5d8d35c9a3127e465 100644 --- a/filtres/images_transforme.php +++ b/filtres/images_transforme.php @@ -1646,7 +1646,16 @@ function image_imagick() { $creer = $image["creer"]; if ($creer) { - if (function_exists($fonc)) { + if (method_exists('Imagick',$fonc)) { + $imagick = new Imagick(); + $imagick->readImage($im); + $args = $tous; + array_shift($args); + array_shift($args); + call_user_func_array([$imagick, $fonc], $args); + _image_gd_output($imagick, $image, _IMG_GD_QUALITE, '_image_imagick_write'); + } + elseif (function_exists($fonc)) { $handle = imagick_readimage($im); $arr[0] = $handle; @@ -1654,12 +1663,7 @@ function image_imagick() { $arr[] = $tous[$i]; } call_user_func_array($fonc, $arr); - // Creer image dans fichier temporaire, puis renommer vers "bon" fichier - // de facon a eviter time_out pendant creation de l'image definitive - $tmp = preg_replace(",[.]png$,i", "-tmp.png", $dest); - imagick_writeimage($handle, $tmp); - rename($tmp, $dest); - ecrire_fichier($dest . ".src", serialize($image)); + _image_gd_output($handle, $image, _IMG_GD_QUALITE, '_image_imagick_write'); } } list($src_y, $src_x) = taille_image($dest); @@ -1668,6 +1672,44 @@ function image_imagick() { } + +/** + * Affiche ou sauvegarde une image au format WEBP + * + * Utilise les fonctions spécifiques GD. + * + * @param resource $img + * Une ressource de type Imagick ou handle + * @param string $fichier + * Le path vers l'image (ex : local/cache-vignettes/L180xH51/image.png). + * @return bool + * + * - false si l'image créée a une largeur nulle ou n'existe pas ; + * - true si une image est bien retournée. + */ +function _image_imagick_write($imagick, $fichier, $qualite = _IMG_GD_QUALITE) { + $tmp = $fichier . ".tmp"; + if (is_a($imagick, 'Imagick')) { + $ret = $imagick->writeImage($tmp); + } + else { + $ret = imagick_writeimage($imagick, $tmp); + } + if (file_exists($tmp)) { + $taille_test = getimagesize($tmp); + if ($taille_test[0] < 1) { + return false; + } + + spip_unlink($fichier); // le fichier peut deja exister + @rename($tmp, $fichier); + + return $ret; + } + + return false; +} + // Permet de rendre une image // plus claire (gamma > 0) // ou plus foncee (gamma < 0)