Miniature d'images en carré ?

LewoLewo Member
mars 2010 modifié dans Entraide
Bonjour,

Je me suis fait envoyé bouler sur un autre site parce-que je ne comprenais rien à la librairie GD (du moins je n'arrivai pas à l'appliquer à ma sauce). Bref... Je me posai la question de savoir si il était possible, à l'upload d'une image via la gestion média de Pluxml, de créer des miniatures à taille fixe, bien carrés ? Je suis complètement perdu en fait...

Edit : je suis ouvert à toutes proposition permettant d'afficher les miniatures dans des carrés bien propres et de même taille.

Réponses

  • GzygGzyg Member
    Dans le fichier core/lib/class.plx.medias.php tu as ces lignes (au tout début) :

    var $miniWidth = 200; # largeur des miniatures
    var $miniHeight = 100; # hauteur des miniatures

    peut-être qu'en les modifiant... ?


    à plus,

    Gzyg
  • Bonjour Lewo,

    Cela ce fais depuis ton admin: Paramètres/Options d'Affichages et Taille des miniatures tout en bas ;)
  • LewoLewo Member
    Arf merci mais ce n'est pas encore ça...

    Je vous ai fait un petit exemple en image :
    exemple_min.jpg

    Avant : c'est ce que j'ai actuellement

    Après : c'est le résultat souhaiter. Seulement là j'ai défini la taille des img dans le css genre 100x100 par conséquent mes images sont déformés : écrasés ou étirés (forcément) ! Donc je cherche à obtenir ce résultat sans déformer l'image (quel soit en paysage ou en portrait)...

    Une idée ?
  • Si tu as une image d'origine de 120 x 80 px et que tu souhaite rendre cette image rectangulaire de base en carré, elle seras automatique déformée.

    Donc l'idée et d'envoyer d'origine des images au bon "format".

    Comme tu le dis "forcément", on ne peux avoir une brebis à 5 pattes :)
  • LewoLewo Member
    J'aime bien l'image (justement !) de la brebis à cinq pattes... Mais la science avance vite Fred ;) méfie toi...
    C'est bien pour ça que je parlais de l'utilisation de la libraire GD lors de l'upload. J'ai fouiller du côté de cette fonction : http://php.net/manual/fr/function.imagecopyresampled.php mais je suis incapable d'adapter ça au script d'upload !
  • StéphaneStéphane Member, Former PluXml Project Manager
    Tel que c'est fait dans pluxml tu ne pourras pas obtenir ce que tu veux, car la génération des miniatures tient compte du ratio largeur x hauteur de l'image pour éviter de la déformer. On ne fait qu'une homothétie pour l'amener au plus près de ce qui est défini dans Paramètres/Options d'Affichages et Taille des miniatures.

    Si ton image source fait 200 x 100 et que tu veux une image finale carrée de 50 x 50, elle sera forcément déformée.

    Si tes images sources sont carrées, alors là oui tu obtiendras des miniatures carrées

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • mars 2010 modifié
    il faut que tu regardes du coté de 'PHP SMART RESIZER' qui fait ça très bien et qui est possible de coupler à pluxml.

    va voir ce post : http://forum.pluxml.org/viewtopic.php?id=1149
  • LewoLewo Member
    C'est exactement ça que je souhaite. Mais après beaucoup d'essais dans tous les sens : impossible d'afficher les miniatures avec "php msart resizer". Les carrés se forment, les liens sont bons mais pas de miniatures... Je ne sais pas pourquoi. Je fait une pause là parce-qu'a force de fouiner je n'ai plus aucune visibilité sur ce que je fait.
  • les miniatures dans 'medias.php' ? oui c'est normal si tu envois tes images via ftp. Les miniatures créées avec PHP SMART RESIZER se mettent dans un dossier cache c'est normal que tu ne vois pas tes images carrés dans "medias.php'.
  • LewoLewo Member
    J'ai bien suivi la discutions lié à ce sujet, mes miniatures ne s'affiche pas dans ma page statique (et rien ne se créer dans le dossier cache). Sur ma page statique, j'ai juste des petits carré avec le alt de l'image miniature donc j'en suis pas loin
  • LewoLewo Member
    mars 2010 modifié
    J'ai trouvé un fonction intéressante qui fonctionne pas trop mal :
    <?php
    /*
    Fonction : function images_resize_carre($src, $dest, $largeur, $src_x, $src_y)
    $src : image à miniaturiser
    $dest : destination de la miniature
    $largeur : dimension d'un côté de la miniature
    $src_x : largeur de l'image d'origine
    $src_y : hauteur de l'image d'origine
    Exemple : images_resize_carre('images/photographie/imagemere.jpg','images/photographie/imageminiature.jpg',50, 100,300);
    */
    function images_resize_carre($src, $dest, $largeur, $src_x, $src_y){ 
    	$im_src=imagecreatefromjpeg($src); // On importe l'image à miniaturiser
    	if ($im_src=="") return; 
            /* On va maintenant chercher si l'image est verticale ou horizontale 
            pour ensuite pouvoir définir le plus grand carré à partir du centre de l'image. */
    	if($src_x >= $src_y){ // Si la largeur de l'image est supérieure à sa hauteur
    		$dim=$src_y; $verticale="1"; // Alors l'image est verticale
    	}
    	elseif($src_x <= $src_y){ // Si la hauteur de l'image est supérieure à sa largeur
    		$dim=$src_x; $horizontale="1"; // Alors l'image est horizontale
    	}
    	else{ // Si la hauteur est égale à la largeur
    		$dim=$src_x; // Alors c'est déjà un carré
    	}
     
            // On détermine le plus grand carré possible
    	if($verticale == "1"){
    		$point_x_ref="0";
    		$point_y_ref=($src_y/2)-($dim/2);
    
    	}
    	if($horizontale == "1"){
    		$point_x_ref=($src_x/2)-($dim/2); 
    		$point_y_ref="0";
    	}
    
    
    	$im_dest=@imagecreatetruecolor($largeur, $largeur);  // On crée notre carré miniaturisé 
    	imagecopyresampled($im_dest, $im_src, 0, 0, $point_x_ref, $point_y_ref, $largeur, $largeur, $dim, $dim); // On copie le plus grand carré possible dans notre carré miniaturisé
    	imagedestroy($im_src);  // On détruit notre plus grand carré possible
    	imagejpeg($im_dest, $dest, 90); // On exporte notre carré miniaturisé
    	imagedestroy($im_dest); // On supprime les fichiers temporaires
    }
    
    ?>
    
    Le tout forme des miniatures bien carrés. Maintenant reste à adapter cette fonction pour qu'elle agisse sur l'ensemble d'un repertoire images (je bloque un peu) et pourquoi pas (c'est faisable aussi) en créer une sorte de plugin d'upload avec cette fonction et un champ permettant de configurer les miniatures.

    Si vous regarder l'exemple :
    images_resize_carre('images/photographie/imagemere.jpg','images/photographie/imageminiature.jpg',50, 100,300);
    
    le nombres à la fin permette de définir : la taille de la miniature (ici 50/50px) et le "cadrage" de la miniature horizontal/vertical. D'ou l'idée d'un formulaire permettant de configurer les miniatures individuellement. Si vous ne ne comprenez pas cette fonction, essayez là et amuser vous à modifier les nombres 50,100,300 vous comprendrez (j'avoue que je ne suis pas très clair)...

    Allez hop, au boulot !
Connectez-vous ou Inscrivez-vous pour répondre.