#1 2012-03-27 15:54:31

Holiday
Membre
2012-03-27
7

Création des miniatures et png transparent

Salut à tous,

J'aimerai corriger le bug qui fait que lorsque l'on upload un png (avec zone transparente), la miniature créée en JPG a un fond noir moche.

En fait j'ai découvert Piwigo aujourd'hui et j'aimerai juste savoir quel script (et en s'appuyant sur quelle classe/biblio) s'occupe de générer les miniatures.

Promis je partagerai la correction ;)

Merci d'avance!

Hors ligne

#2 2012-03-27 16:51:58

Holiday
Membre
2012-03-27
7

Re: Création des miniatures et png transparent

J'ai trouvé une solution, mais il s'agit d'une bidouille qui risque de pas plaire. Par contre elle fonctionne ^^

Dans "admin/includes/images.class.php" à la ligne 626 la fonction "imagejpeg" est appliqué aux images, car la destination finale est en jpg pour toutes les miniatures. Ce qui crée ce "fond noir" (car on prend pas le soin de gérer la transparence)...

Ma solution est de savoir "Est ce que on est en train de créer une miniature" et si oui, appliquer la fonction "imagepng" plutôt que "imagejpeg". La contrainte? Le marqueur jpg de la "thumbnail" est incorrect ... Personnellement je m'en tape car je compte pas proposer mes thumbs au téléchargement ou en édition.

La modification est un peu chaude, donc si vous en avez besoin, envoyez un mp ou répondez ...

Hors ligne

#3 2012-03-27 17:22:01

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Création des miniatures et png transparent

l'idéal serait de choisir quelle fonction utiliser, imagepng si on a du png, imagejpeg sinon

mais en fait le problème est un peu plus complexe que ça : je suppose que vous utilisez la synchronisation FTP donc vous ne vous en êtes pas rendu compte, mais si on utilise le formulaire web ou l'API les images sont toujours réenregistrées en JPG, c'est d'autant plus vrai maintenant avec le mulisize

donc la question est de décider si on permet l'upload d'images avec couche alpha, auquel cas il ya pas mal de code à mettre à jour

Hors ligne

#4 2012-03-27 17:25:39

Holiday
Membre
2012-03-27
7

Re: Création des miniatures et png transparent

En effet j'ai pas tout testé,car je n'utilise pas le synchro FTP pour les miniatures.

La modification fonctionne avec l'uploadify et l'upload HTML normal =)

Je sais qu'il s'agit d'une bidouille, mais pour l'instant je n'ai pas trouvé d'autre contrainte que celle cité (mauvais marqueur).

Dans tous les cas je vais continuer les tests demain avec un cas pratique ... Je vous tiens au jus ;)

Hors ligne

#5 2012-03-28 11:57:55

Holiday
Membre
2012-03-27
7

Re: Création des miniatures et png transparent

Re!

J'ai également corrigé le fond noir pour imagick.

Je code commente depuis le début.

Dans function_upload.inc.php on intercepte l'appel de la fonction "pwg_resize" à la ligne 380 (l'appel pour la création de la thumbnail). Il suffit de rajouter un paramètre "true" qui indiquera que l'on est en train de créer une miniature.

Code:

  $img->pwg_resize(
    $thumb_path,
    $conf['upload_form_thumb_maxwidth'],
    $conf['upload_form_thumb_maxheight'],
    $conf['upload_form_thumb_quality'],
    false,
    true,
    $conf['upload_form_thumb_crop'],
    $conf['upload_form_thumb_follow_orientation'],true
    );

Il faut maintenant modifier la fonction pwg_resize, sinon afin d'exploiter cette modification

Dans image.class.php à la Ligne 92 Il faut modifier l'entete de la fonction (afin de passer le nouveau paramètre)

Code:

function pwg_resize($destination_filepath, $max_width, $max_height, $quality, $automatic_rotation=true, $strip_metadata=false, $crop=false, $follow_orientation=true, $thumb=false)

On met false par défaut afin de rendre cette bidouille facultative.

Maintenant on va se servir de ce paramètre dans les fonctions "write" respectivement associées à la librairie GD et ext_imagick (j'ai pas encore fait pour imagick tout court)

Dans la classe image_ext_imagick (toujours dans image.class.php) à la Ligne 483 environ, dans la fonction write, remplacer l'entete par ça :

Code:

  function write($destination_filepath,$thumb=false)
  {
  
  if($thumb == true){
    $this->add_command('background', 'white');
    $this->add_command('flatten');
    $this->add_command('alpha', 'off');   
  }

Ce qui aura pour effet de mettre un fond black aux miniatures et de désactiver l'alpha (origine du bug)

Pour appliquer le correctif à GD, il faut se rendre dans la fonction write de la classe image_gd à la Ligne 630 environ, dans le else de détection du format de sortie (jpg donc car la miniature est en jpg)

Remplacer

Code:

imagejpeg($this->image, $destination_filepath, $this->quality);

Par

Code:

    if($thumb == true)
      imagepng($this->image, $destination_filepath);
    else
      imagejpeg($this->image, $destination_filepath, $this->quality);

Ce qui va générer une miniature jpg transparente avec un marqueur invalide ... Mais à priori on s'en fout car le user ne va pas télécharger la thumb.

C'est un peu de la bidouille mais ça marche pour l'uploadify et l'upload en html.

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact