PHP : Galerie d'images
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

PHP : Galerie d'images



  1. #1
    invite91ba93c2

    PHP : Galerie d'images


    ------

    Bonjour!
    J'ai un problème et j'ai besoin de votre aide, en fait, je cherche à créer une galerie d'image (une grande image jpg qui contient plusieurs images miniatures) en PHP, et je suis bloqué.
    En fait, j'aimerais savoir si il est possible de réaliser cette image uniquement en php, à l'aide d'un script, où si le html/css sont obligatoires.

    J'ai fait plusieurs recherches sur le net, mais, tout les tutos que j'ai lu passe par des pages html et css puis génère la galerie dans une page web.

    Je sais aussi que la libreire GD permet de generer une image en php à l'aide de la balise :

    <?php
    header ("Content-type: image/jpg" );
    ?>

    Mais, je ne sais pas comment mettres plusieurs images dans l'image résultat!

    Voila, je suis vraiment coincé, et toute aide/piste sera la bienvenue

    Merci!

    -----

  2. #2
    lucas.gautheron

    Re : PHP : Galerie d'images

    Ben.... Faut savoir ce que tu veux faire exactement... Si tu veux juste placer des images dans une grande image, alors tu pourras te contenter de PHP/GD..
    Si tu souhaites faire une galerie navigable depuis un navigateur, il te faudra passer par HTML/CSS, mais bon si tu comprends ces "technologies" et que tu connais tes besoins tu devrais pas avoir de soucis à trouver ce que tu devras utiliser

    Ce que tu appelles la balise "header ("Content-type: image/jng");" n'a rien à voir avec GD.. C'est juste une façon pour PHP d'indiquer au client qui a initié la requête HTTP que le résultat est une image jpeg et donc à lire en tant que tel.

    En ce qui concerne GD, si tu veux créer une image dans laquelle en ajouter d'autres... Tu auras besoins des fonctions imagecreate, pour créer ton "fond", imagecreatefromjpeg ou imagecreatefrompng ainsi que imagecopymerge pour importer et insérer d'autres images depuis des fichiers.
    La documentation de PHP est très complète à ce sujet. Consulte là.

  3. #3
    invite91ba93c2

    Re : PHP : Galerie d'images

    Merci lucas.gautheron pour la réponse,Ou en fait, Je veux juste creer une imlage à partir de plusieurs, sans html surtout, j'ai consulté la documentation, et j'ai aussi fait le tuto de site de zéro, seulement, à aucun endroikt, on m'explique comment faire pour mettre plusieurs images dans une seule, dois je redimensionner mes images d'origine ou pas? comment etre sur que toute les images rentrent dans l'image finale? c'est ça mon problème!
    Merci encore!

  4. #4
    lucas.gautheron

    Re : PHP : Galerie d'images

    Il faut bien cerner ton problème.
    Combien d'images veut tu insérer ? Quelles sont globalement leurs dimensions ?
    Quelles doivent être les dimensions de l'image finale ?
    Comment doit-on placer les images les unes par rapport aux autres ?

    J'ai écrit ce petit bout de code qui fusionne 4 images et qui peut s'adapter facilement, essaie de le comprendre, j'ai mis je pense suffisamment de commentaires.
    Et encore une fois, consulte la documentation !!

    Voici le lien vers le résultat, en attendant la validation de la pièce jointe :
    http://de582.ispfr.net/merge/image.php

    Le code source :

    Code PHP:
    <?php
    header
    ('Content-Type: image/jpeg');

    // paramètres
    define('MARGE'25); // marge entre chaque vignette ou entre les vignettes et les bords de l'image finale
    define('LARGEUR_VIGNETTE'400); // largeur d'une vignette (on les suppose de dimensions identiques)
    define('HAUTEUR_VIGNETTE'300); // hauteur d'une vignette
    define('IMAGES_LARGEUR'2); // nombre de vignettes en largeur
    define('IMAGES_HAUTEUR'2); // nombre de vignettes en hauteur
    define('COULEUR_FOND'0x404040); // code couleur hexadécimal du fond de l'image

    // calcul des dimensions de l'image finale
    $largeur MARGE IMAGES_LARGEUR * (LARGEUR_VIGNETTE MARGE);
    $hauteur MARGE IMAGES_HAUTEUR * (HAUTEUR_VIGNETTE MARGE);

    // création de l'image finale "$image"
    $image imagecreatetruecolor($largeur$hauteur);
    // remplissage avec la couleur de fond
    $fond imagecolorallocate($image, (COULEUR_FOND 0xFF0000) >> 16, (COULEUR_FOND 0x00FF00) >> 8, (COULEUR_FOND 0x0000FF));
    imagefill($image00$fond);

    // importations des autres images
    $images = array(); // matrice contenant les images
    /*
       0 1 2 ...
     0 x x x 
     1 x x x
     2 x x x
     .
     
     Une image est accessible de la façon suivante : $images[colonne][ligne]
    */

    $images[0][0] = imagecreatefromjpeg('400_1.jpg');
    $images[1][0] = imagecreatefromjpeg('400_2.jpg');

    $images[0][1] = imagecreatefromjpeg('400_3.jpg');
    $images[1][1] = imagecreatefromjpeg('400_4.jpg');

    // On place les images...

    for($colonne 0$colonne IMAGES_LARGEUR$colonne++) for($ligne 0$ligne IMAGES_HAUTEUR$ligne++)
    {
        
    $destination_x $colonne * (LARGEUR_VIGNETTE MARGE) + MARGE;
        
    $destination_y $ligne * (HAUTEUR_VIGNETTE MARGE) + MARGE;
        
    $source_x $source_y 0;
        
    $largeur_source LARGEUR_VIGNETTE;
        
    $hauteur_source HAUTEUR_VIGNETTE;
        
    imagecopymerge($image$images[$colonne][$ligne], $destination_x$destination_y$source_x$source_y$largeur_source$hauteur_source100);
    }

    // affichage de l'image
    imagejpeg($imageNULL100);
    ?>
    Images attachées Images attachées  

  5. A voir en vidéo sur Futura
  6. #5
    invite91ba93c2

    Re : PHP : Galerie d'images

    merci bcp pour l'aide, seulement mon souci est un peu differents. voila les infos :
    mon image final est un jpg de 919 * 326 et les images de base on des dimensions variables
    je doit en fait les mettre dans l'image final mais en superposé (un peu n'importe comment)
    je soit donc faire un script pour le redimensiennement nn?


    merci encore!

  7. #6
    lucas.gautheron

    Re : PHP : Galerie d'images

    Pour le redimensionnement, rien de bien compliqué...
    Il faut utiliser la fonction "imagecopyresampled"

    Voilà ce que donne mon script, avec redimensionnement (les images d'origines sont de taille 400 x 300) et bordure pour les images insérées. Regarde bien l'usage de imagecopyresampled, dans la boucle for.

    Code PHP:
    <?php
    header
    ('Content-Type: image/jpeg');

    // paramètres
    define('MARGE'25); // marge entre chaque vignette ou entre les vignettes et les bords de l'image finale
    define('LARGEUR_VIGNETTE'200); // largeur d'une vignette (on les suppose de dimensions identiques)
    define('HAUTEUR_VIGNETTE'150); // hauteur d'une vignette
    define('IMAGES_LARGEUR'2); // nombre de vignettes en largeur
    define('IMAGES_HAUTEUR'2); // nombre de vignettes en hauteur
    define('COULEUR_FOND'0x404040); // code couleur hexadécimal du fond de l'image
    define('COULEUR_BORDURE'0x000000);

    // calcul des dimensions de l'image finale
    $largeur MARGE IMAGES_LARGEUR * (LARGEUR_VIGNETTE MARGE);
    $hauteur MARGE IMAGES_HAUTEUR * (HAUTEUR_VIGNETTE MARGE);

    // création de l'image finale "$image"
    $image imagecreatetruecolor($largeur$hauteur);
    // remplissage avec la couleur de fond
    $fond imagecolorallocate($image, (COULEUR_FOND 0xFF0000) >> 16, (COULEUR_FOND 0x00FF00) >> 8, (COULEUR_FOND 0x0000FF));
    $bordure imagecolorallocate($image, (COULEUR_BORDURE 0xFF0000) >> 16, (COULEUR_BORDURE 0x00FF00) >> 8, (COULEUR_BORDURE 0x0000FF));
    imagefill($image00$fond);

    // importations des autres images
    $images = array(); // matrice contenant les images
    /*
       0 1 2 ...
     0 x x x 
     1 x x x
     2 x x x
     .
     
     Une image est accessible de la façon suivante : $images[colonne][ligne]
    */

    $images[0][0] = imagecreatefromjpeg('400_1.jpg');
    $images[1][0] = imagecreatefromjpeg('400_2.jpg');

    $images[0][1] = imagecreatefromjpeg('400_3.jpg');
    $images[1][1] = imagecreatefromjpeg('400_4.jpg');

    // On place les images...

    for($colonne 0$colonne IMAGES_LARGEUR$colonne++) for($ligne 0$ligne IMAGES_HAUTEUR$ligne++)
    {
        
    $destination_x $colonne * (LARGEUR_VIGNETTE MARGE) + MARGE;
        
    $destination_y $ligne * (HAUTEUR_VIGNETTE MARGE) + MARGE;
        
    $source_x $source_y 0;
        
    $largeur_source imagesx($images[$colonne][$ligne]); // largeur de l'image source
        
    $hauteur_source imagesy($images[$colonne][$ligne]); // hauteur de l'image source
        
    $largeur_destination LARGEUR_VIGNETTE;
        
    $hauteur_destination HAUTEUR_VIGNETTE;
        
        
    imagecopyresampled($image$images[$colonne][$ligne], $destination_x$destination_y$source_x$source_y$largeur_destination$hauteur_destination$largeur_source$hauteur_source);
        
    imagerectangle($image$destination_x-1$destination_y-1$destination_x+LARGEUR_VIGNETTE$destination_y+HAUTEUR_VIGNETTE$bordure);
    }

    // affichage de l'image
    imagejpeg($imageNULL100);
    ?>
    Pour ton besoin, la dimension globale est donnée.
    Donc tu ne peux pas la calculer en fonction de tes images d'entrée.
    Si tu veux mettre les images n'importe comment, j'imagine qu'il faudra faire quelque chose d'un peu aléatoire...
    Commence déjà par coder le minimum, montre nous ce que tu as fait et on verra après...

  8. #7
    invite91ba93c2

    Re : PHP : Galerie d'images

    Ok, merci beaucoup! je bosse dessus!

  9. #8
    invite91ba93c2

    Re : PHP : Galerie d'images

    Avant que j’entame l'adaptation de ce code, j'aimerai bien te montrer le code que moi j'ai fait, il est différent de tien, et il ne fonctionne pas très bien, je ne sais pas pourquoi, mais, il ne m'affiche qu'un fond noir!

    Code PHP:
    <?php
    header 
    ("Content-type: image/jpeg");



    //      images source

    $listimg = array ('im-11.jpg''im-12.jpg''im-33.jpg''im-44.jpg''im-15.jpg');
    $img_finale imagecreatetruecolor919326);


    imagejpeg($img_finale);

    //variables pour les mesures
    $i =0;
    $largeur 0;
    $hauteur 0;
    $ratio 30;
    for (
    $i =0$i<5$i++)
    {
    // on recupere l'image courante
    $file $listimg[$i];
    //on creer un jpg à partir de l'image courante
    $img imagecreatefromjpeg($file);
    //on recupere la taille de l'image
    $img_size getimagesize($file);
    // on teste si la taille de l'image est superieure à la taille de fond
    if($img_size >919)
    {
    //on compare la largeur de l'image à sa hauteur pour voir la quelle est plus grande.
    if ($size[0] > $size[1]) {
    //on redimensionne l'image suivant la largeur
    $im=imagecreate(round(($ratio/$size[1])*$size[0]), $ratio);
    // on creer l'image redimenstionnée
    imagecopyresampled($im$src0000round(($ratio/$size[1])*$size[0]),$ratio$size[0], $size[1]);
    }
    //on redimonstionne l'image suivant la hauteur
    else {
        
    $img=imagecreate($ratioround(($ratio/$size[0])*$size[1]));
        
    //on creer l'image redimensionnée
        
    imagecopyresampled($im$src0000$ratioround($size[1]*($ratio/$size[0])), $size[0], $size[1]);
    }
    // le nom de l'image miniaturisée et on l'enregistre dans photo
    $miniature "mini_$Image";
    $photo Imagejpeg ($img$miniature);
    }
    //on vérifie si on est pas arriver à la fin de la ligne. la variable largeur est initialisée à 0.
    if ($largeur <919)
    {
    //on place l'image dans la position correspondante
    imagecopy $img_finale$photo$largeur0,$hauteur,0$img_size[0], $img_size[1]);
    //on avance de la largeur de l'image
    $largeur $largeur $img_size[0];
    }
    else 
    {
    //Si c'est la fin de la ligne, on descent à la ligne. 
    $hauteur $hauteur $img_size;
    imagecopy $img_finale$photo$largeur0,$hauteur,0$img_size[0], $img_size[1]);
    // on remet la largeur à 0.
    $largeur 0;

    $largeur $largeur $img_size[0];
    }

    }

    imagejpeg($img_finale);

    ?>

    Merci encore!
    Dernière modification par yoda1234 ; 24/02/2012 à 05h47.

  10. #9
    lucas.gautheron

    Re : PHP : Galerie d'images

    Oulah...
    Déjà utilise les balises PHP :
    Ensuite, ça sent le truc repompé sans réfléchir..
    Par exemple, tu lis les informations sur l'image à la ligne suivante :
    Code PHP:
    $img_size getimagesize($file); 
    Déjà, c'est inutile d'utiliser getimagesize, tu as ouvert l'image avec GD, tu peux utiliser les fonctions de GD (imagesx, imagesy) pour connaitre les dimensions de l'image.
    Mais passons...
    Code PHP:
    if($img_size >919
    $img_size est un array, parce que getimagesize retourne un tableau !! ça n'a pas de sens de comparer un entier à un tableau.....
    Code PHP:
    if ($size[0] > $size[1]) { 
    d'où sort la variable size exactement ?

    Je me suis arrêté là... Le mieux pour toi c'est de faire un algorithme avant, en fait, ensuite tu retranscris le code...

  11. #10
    invite91ba93c2

    Re : PHP : Galerie d'images

    Bonjour, je suis désolé pour le code un peu bizzare que j'ai posté, en fait, je débute en php et voila, hier j'ai bosser sur l'algorithme, et j'ai écris un code. Mes images s'affichent dans le cadre
    (un peu partout comme je le veux, j'ai utilisé des positions aléatoires). Seulement j'ai deux problèmes :

    1. J'ai écris une fonction resize qui redimentionne mon image quant elle dépace le cadre.cette fonction me renvoi une image redimensionnée mais je n'ai plus le cadre avec les autres images :s.

    2. J'ai essaye de changer la couleur du fond de mon image finale mais je n' y arrive pas :S

    Merci beaucoup !

    Voila mon code :
    Code:
    <?php
    header('Content-Type: image/jpeg');
    
    function resize($source, $tailleX, $tailleY)
    {
    	$destination = imagecreatetruecolor($tailleX, $tailleY);
    
    	$largeur_source = imagesx($source);
    	$hauteur_source = imagesy($source);
    	$largeur_destination = imagesx($destination);
    	$hauteur_destination = imagesy($destination);
    
    	imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
    
    	imagejpeg($destination);
    
    	return $destination;
    }
    
    $tailleX = 919;
    $tailleY = 326;
    $resultat = imagecreatetruecolor($tailleX, $tailleY);
    $images = array(
    		imagecreatefromjpeg("im-26.jpg"),
    		imagecreatefromjpeg("im-11.jpg"),
    		imagecreatefromjpeg("im-15.jpg"),
    		imagecreatefromjpeg("im-33.jpg"),
    		imagecreatefromjpeg("im-44.jpg"),
    		imagecreatefromjpeg("im-12.jpg"),
    		imagecreatefromjpeg("im-15.jpg"),
    		imagecreatefromjpeg("im-15.jpg"),
    		imagecreatefromjpeg("im-33.jpg"),
    		imagecreatefromjpeg("im-44.jpg"),
    	
    );
    
    foreach ($images as $image)
    {
    	$posX = mt_rand(0, $tailleX);
    	$posY = mt_rand(0, $tailleY);
    	$x =imagesx($image);
    	$y =imagesy($image);	
    if ($x >$tailleX)
    {
    
    $image = resize($image, $tailleX,$y);
    imagecopymerge($resultat, $image, $posX, $posY, 0, 0, imagesx($image), imagesy($image), 100);
    }
    
    	imagecopymerge($resultat, $image, $posX, $posY, 0, 0, imagesx($image), imagesy($image), 100);
    }
    imagejpeg($resultat);

  12. #11
    lucas.gautheron

    Re : PHP : Galerie d'images

    Vu là façon dont tu procèdes actuellement, à chaque appel de resize, tu recrées une image vide ($destination = imagecreatetruecolor($tailleX, $tailleY), puis tu copies la source dedans, et tu affiches la sortie...
    Il ne faut pas"afficher" l'image à chaque appel !! (avec imagejpeg) mais seulement le résultat final.

    Bon je regarderai le reste dans sa globalité plus tard.
    Ah aussi, si tu souhaites que les images soient placées au hasard mais toujours de la même façon pour un assemblage donné, regarde du côté de la fonction mt_srand, si ça t'intéresse bien sur :
    http://php.net/manual/fr/function.mt-srand.php

    A+,
    Dernière modification par lucas.gautheron ; 23/02/2012 à 23h54.

Discussions similaires

  1. Prétélécharger une galerie d'images avant qu'elle ne s'affiche
    Par JPhL dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 15/09/2010, 21h55
  2. Insérer une page php avec variables (ex : page.php?nom=jean) grâce au javascript
    Par invite991c0955 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 21/05/2005, 17h37