[RÉSOLU] Modifier la génération des miniatures

PPmarcelPPmarcel Member
juillet 2016 modifié dans Modifications
Bonjour,

Sur pluxml 5.4 j'avais mis les mains dans le moteur afin de modifier la génération des miniatures. Ce que je voulais était :

[list=*]
[*]conserver les dimensions d'origine des images (laissant le navigateur s'en occuper)[/*]
[*]recompresser les images à hauteur de 60%[/*]
[*]transformer les jpegs en progressive (l'image s'affiche en basse qualité puis s'améliore pendant le chargement)[/*]
[/list]


Pour cela j'avais commenté fonction copyresampled qui redimensionne l'image créés la minature dans makeThumb() :
        # Création de l'image
        $image_p = imagecreatetruecolor($width,$height);

        if($type == 1) { # gifs
            ...
        }
        elseif($type == 2) { # jpegs
            $image = imagecreatefromjpeg($filename);
            #imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
            #imagejpeg($image_p, $filename_out, $quality);
            imageinterlace($image, true); // create progressive JPGs
            imagejpeg($image, $filename_out, 60);
        }
        elseif($type == 3) { # png
           ...
        }

Or dans pluxml 5.5 il semblerait que l'utilisation de la fonction imagecopyresampled soit maintenant requis pour la génération des images.

Quelqu'un pourrait-il me donner un coup de main pour by-passer le redimensionnement et ajouter imageinterlace() là où ce serait le plus indiqué ?

Merci d'avance

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    1. Pourquoi vouloir bypasser la génération des miniatures en modifiant le code. ça ne revient pas à utiliser la taille de l'image originale et donc choisir lors de l'upload: Redimensionner images = Taille originale et Créer miniatures = Pas de miniature

    2. le taux de compression des jpeg est déjà à 60%. Il est définit dans la classe class.plx.medias.php au niveau de la variable de classe
    	public $thumbQuality = 60; # qualité image
    

    3. L'emplacement de imageinterlace me semble ok

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • PPmarcelPPmarcel Member
    août 2016 modifié
    Bonjour Stéphane,

    Merci pour ta réponse. En fait je souhaite avoir quelque chose différent de ce que tu décris.

    Je veux d'une part des "miniatures" réduites fortement en qualité mais sans redimensionnement pour les pages, et les images originales pour l'affichage en visionneuse (colorbox). A taille réelle les minatures présentent alors beaucoup d'artefacts. Mais leur dimension dans les articles étant restreintes en taille, le navigateur doit les afficher en plus petit et les artefacts ne sont plus visibles. Cela présente l'avantage d'avoir une bonne définition d'image sur les écrans rétina (1600x1600 au lieu d'un 800x800 par exemple). En revanche les images colorbox s'affichant en plein écran, je veux que la qualité soit bien meilleure.

    Mon soucis c'est qu'on dirait que vers la fin de la fonction MakeThumb() on a un "if imagecopyresampled(options){ switch... return image}". On dirait que imagecopyresampled devient indispensable pour la génération des miniatures, alors que avant je pouvais le commenter (voir code 5.4 plus haut).

    Autrement j'ai essayé de définir des miniatures de 3000x3000 par exemple, pensant que si l'image est plus petite on conservera la taille originale. Mais ça les agrandis finalement. :)

    ____________________________________________


    EDIT: finalement j'ai fini par élaguer tout ce qui attrait au redimensionnement et j'ai créé un case qui va bien pour générer les types d'images qui me conviennent.
    public static function makeThumb($src_image, $dest_image, $thumb_width = 48, $thumb_height = 48, $jpg_quality = 90) {
    
            if(!function_exists('imagecreatetruecolor')) return false;
    
            // Get dimensions of existing image
            $image = getimagesize($src_image);
    
            // Determine format from MIME-Type
            $image['format'] = strtolower(preg_replace('/^.*?\//', '', $image['mime']));
    
            switch( $image['format'] ) {
              case 'jpg':
              case 'jpeg':
                  $image_data = imagecreatefromjpeg($src_image);
                  imageinterlace($image_data, true); // create progressive JPGs
                  imagejpeg($image_data, $dest_image, 60);
                  break;
              case 'png':
                  $image_data = imagecreatefrompng($src_image);
                  imageinterlace($image_data, true);
                  imagepng($image_data, $dest_image, 60);
                  break;
              case 'gif':
                  $image_data = imagecreatefromgif($src_image);
                  imageinterlace($image_data, true);
                  imagegif($image_data, $dest_image, 60);
              break;
              default:
                  return false; // Unsupported format
              break;
            }
    
            return is_file($dest_image);
    }
    
Connectez-vous ou Inscrivez-vous pour répondre.