Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Bonjour,
depuis que dotclear génère des thumbnail, il y a toujours eu quelque chose qui m'a agacé : la transparence d'un fichier png n'est pas sauvegardée. Du coup, un fond gris est ajouté, pour le meilleur ou pour le pire (principalement pour le pire, d'ailleurs).
Ci-joint un patch qui résout ce problème. Le patch est relativement simple, et effectue les choses suivantes :
* les thumbnails sont sauvegardées au format png ; clairement, c'est overkill pour les grosses, grosses images, et ce n'est peut-être pas une solution très élégante (en même temps, la sauvegarde en jpg n'est guère adaptée aux blogs qui sont un tant soit peu techniques - les schemas et autres images qui peuvent être ajoutées sont assez mal traitées par le jpeg)
* on demande explicitement à GD de sauvegarder la souche alpha dans les PNG - au moment de l'ouverture du fichier originel, et au moment de la création du fichier thumbnail. Du coup, les thumbnails générés ont cette couche alpha, pour mon plus grand bonheur.
Je ne penses pas que ce patch ait un effet catastrophique sur la plupart des blogs existants. Ceux qui ont un blog photo devrait quand même prendre garde, parce que les thumbnails PNG sont plus lourds que les thumbnails JPG (et puisque les photos ne sont pas impactées par le problème, le patch n'a pas vraiment d'intérêt).
Quoi qu'il en soit, ce patch propose une solution à mon problème. Ce n'est pas nécessairement la meilleure solution (peut-être faudrait-il vérifier le type du fichier originel, ou vérifier si ce fichier a une couche alpha) mais elle peut servir de base à la solution finale. Ma connaissance de dc2 reste limitée, donc je n'ai pas poussé mes recherches plus loin. Dans tous les cas, il serait vraiment souhaitable d'avoir quelque chose qui, au final, respecte le principe de moindre surprise - c'est à dire qu'un thumbnail d'une image avec une couche alpha devrait avoir une couche alpha.
diff -r 2f05a77db4e9 inc/core/class.dc.media.php
--- a/inc/core/class.dc.media.php Mon Aug 13 10:27:57 2012 +0200
+++ b/inc/core/class.dc.media.php Tue Aug 14 14:47:06 2012 +0200
@@ -912,7 +912,7 @@ class dcMedia extends filemanager
($suffix == 'sq' || $w > $s[0] || $h > $s[0]))
{
$img->resize($s[0],$s[0],$s[1]);
- $img->output('jpeg',$thumb_file,80);
+ $img->output('png',$thumb_file,80);
}
}
$img->close();
diff -r 4f62679e0756 inc/libs/clearbricks/image/class.image.tools.php
--- a/inc/libs/clearbricks/image/class.image.tools.php Thu May 31 09:09:21 2012 +0200
+++ b/inc/libs/clearbricks/image/class.image.tools.php Tue Aug 14 14:47:06 2012 +0200
@@ -79,7 +79,8 @@ class imageTools
case 3 :
$this->res = @imagecreatefrompng($f);
if (is_resource($this->res)) {
- @imagealphablending($this->res, true);
+ @imagealphablending($this->res, false);
+ @imagesavealpha($this->res, true);
}
break;
case 2 :
@@ -288,8 +289,8 @@ class imageTools
# truecolor is 24 bit RGB, ie. 3 bytes per pixel.
$this->memoryAllocate($_w,$_h,3);
$dest = imagecreatetruecolor($_w,$_h);
- $fill = imagecolorallocate($dest,128,128,128);
- imagefill($dest,0,0,$fill);
+ @imagealphablending($dest, false);
+ @imagesavealpha($dest, true);
imagecopyresampled($dest,$this->res,0,0,$decalW,$decalH,$_w,$_h,$cropW,$cropH);
imagedestroy($this->res);
$this->res = $dest;
Hors ligne
Bonjour,
pour la version 2.5, il faut aussi modifier la variable $thumb_tp à la ligne 31 de inc/core/class.dc.media.php:
- public $thumb_tp = '%s/.%s_%s.jpg';
+ public $thumb_tp = '%s/.%s_%s.png';
Hors ligne
Bonjour,
Je rencontre le même problème.
Cela va t il poser des problèmes pour les mises à jour ?
Merci.
Dernière modification par pressecologie (2013-08-03 09:07:16)
Hors ligne
Pour les mises à jour automatique, oui, il faudra reporter la modification sur la nouvelle version.
Je vous encourage à ouvrir un ticket pour ce problème.
Dotclear addicted since 2004
Hors ligne
Ticket ouvert :
http://dev.dotclear.org/2.0/ticket/1465
Hors ligne
Vous n'êtes pas identifié(e).