IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[ImageMagick] Générer une image à partir de plusieurs images ? [Tutoriel]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut [ImageMagick] Générer une image à partir de plusieurs images ?
    Bonjour,

    J'ai des pages html qui affichent une mosaique d'images dans un tableau 3x3 (total donc 9 images par exemple). L'utilisateur doit pouvoir récupérer les images assemblées pour les imprimer. Actuellement il peut le faire en utilisant un éditeur d'images et en créant lui-même un panorama.

    C'est assez fastidieux ...

    Je voudrais donc générer sur le navigateur une seule image, dynamiquement, qui serait l'assemblage de mes 9 images afin que l'utilisateur puisse l'imprimer directement.

    J'ai essayé avec la fonction imagejpeg, mais je sèche lamentablement.

    Quelqu'un a t'il déjà fait un truc de ce genre ?

    Merci d'avance.

    Eric

  2. #2
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut!

    J'ai fait un truc dans le genre pour générer une image météo pour le site http://jleader.adjanakis.org. J'avais trouvé ce qu'il me fallait sur le site http://www.php.net. Si tu n'as pas trouvé d'ici ce soir, j'essaierai de poster les sources ici.(je les ai pas sur moi)
    Pensez au tag

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    merci bien, je suis preneur des sources que j'adapterais, car même avec php.net je patauge.

    Eric

  4. #4
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    chose promis chose due

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    <?php
    //Attention a n'afficher AUCUN texte !!!!
    //On doit renvoyer une image
    header("Content-type: image/png");
     
    //...
     
    //Nombre d'image météo
    $IMG_METEO_NUMBER = 4;
     
    //Nom carte vierge
    $IMG_CLEAN_NAME = "france";
    $IMG_EXT = ".png";
    $IMG_WEATHER_ITEM_NAME = "weather";
     
    //Prévision
    $TODAY = 1;
    $TOMORROW = 2;
    $METEO_DAY[$TODAY] = 'WEATHERID';
    $METEO_DAY[$TOMORROW] = 'TOMORROWWEATHERID';
    $TIME_LIMIT = 3600;
     
    //...
     
    //Si le jour est inconnu on renvoit la carte vierge
    if(!isset($METEO_DAY[$mode])){
       imagepng(imagecreatefrompng($IMG_CLEAN_NAME.$IMG_EXT));
       exit(0);
    }
     
    //...
     
    //Chargement de la carte de france
    $fond     = imagecreatefrompng($IMG_CLEAN_NAME.$IMG_EXT);
     
    //Chargement des images météo
    for($i = 0; $i < $IMG_METEO_NUMBER; $i++)
       $infometeo[$i] = imagecreatefrompng($IMG_WEATHER_ITEM_NAME.$i.$IMG_EXT);
     
    //Ouvrir le fichier descripteur
    $region_def = fopen($RSS_FRENCH_REGION,"r");
     
    //...
     
    //Complétion de l'image
    while(!feof($region_def)){
     
       @set_time_limit(20);
     
       //Récupération des données cartographique
       list($region_name,$id,$offset_x,$offset_y) = split("/",fgets($region_def));
     
       //...
     
       //Récupération des données 
       $meteo = ...;
     
       //Ajout du point météo sur la carte
       $width  = imagesx($infometeo[$meteo]);
       $height = imagesy($infometeo[$meteo]);
       imagecopymerge( $fond, $infometeo[$meteo], $offset_x-$width/2, $offset_y-$height/2, 0, 0, $width, $height, 75);
    }
     
    //Fermeture du fichier descripteur
    fclose($region_def);
     
    //On enregistre la mise a jour
    imagepng($fond,$IMG_CLEAN_NAME.$mode.$IMG_EXT);
     
    //...
     
    //On affiche l'image
    imagepng($fond);
     
    //Libération de l'espace mémoire des images
    imagedestroy($fond);
    for($i = 0; $i < $IMG_METEO_NUMBER; $i++)
       imagedestroy($infometeo[$i]);
     
     
    ?>
    N'oublies surtout pas un point important qui est qu'il ne faut aucune sortie de caractères hors de celle produite par imagepng. Bonne chance.
    Pensez au tag

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    merci adjanakis je regarde ton script et l'adapte

    eric

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    bon, j'ai commencé par une adaptation toute simple (à priori ...) mettre 4 images (A1.jpg --> A4.jpg) les unes à coté des autres dans une image "fond.jpg".

    2 problèmes :
    - j'obtiens des warning "wrong parameter for imagecopymerge ..."
    - j'affiche un charabia incompréhensible comme si les images étaient affichées sous forme de texte ...

    Voici le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
     
    header("Content-type: image/jpeg");
    header('Content-transfer-encoding: binary');
     
    $destination=imagecreatefromjpeg("fond.jpg");
     
    $n=4;
     
    $x_dest=-580;
    $y_dest=-580;
     
    for($i = 1; $i < $n+1; $i++)
    	{
    	$fichier=imagecreatefromjpeg("A".$i.".jpg");
    	$largeur=imagesx($fichier);
    	$hauteur=imagesy($fichier);
     
    	$x_dest=$x_dest+$largeur;
    	$y_dest=$y_dest+$hauteur;
     
    	imagecopymerge($destination,$fichier,$x_dest,10,$hauteur,$hauteur,100);
    	//imagedestroy($fichier);
    	}
     
     
    imagejpeg($destination);
     
    imagedestroy($destination);
    ?>
    please help ...

  7. #7
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Hello!

    Je ne peux pas trop tester ton code en ce moment, mais je te dirais simplement que tant que tu auras un warning d'affiché, l'image ne pourra pas passer. En effet, le texte du warning est interprété comme un bout de l'image par le navigateur. Sinon, à quoi correspond le -580?
    Pensez au tag

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Cool, merci de ta réponse ... c'était tellement évident que je n'avais pas pensé au coup du warning ! je vais modifier la config de php.

    Pour le -580 c'est histoire que ma première image commence à 0 en x car toutes mes images font 580x580. Donc avec "$x_dest=$x_dest+$largeur;" en initialisant $x_dest à -580 je commence à 0 .. c'est bof, je sais, mais sous le coude j'avais rien de mieux !

    eric

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut ça tourne !
    voila, tout est corrigé.

    j'ai adapté le script pour une matrice d'image 5x5. Le dernier problème, c'est que l'image est bien créer, on peut l'enregistrer, mais elle ne s'affiche pas dans la fenètre du navigateur ... Sinon ça tourne.

    Le code à adapter pour ceux que ça interresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
     
    header("Content-type: image/jpeg");
     
    error_reporting(0);
     
    $carte="nom_carte"; // à modifier
     
    $n_x=5;
    $n_y=5;
     
    // ----------------------------------------------------------------------------
     
    $destination=imagecreatetruecolor(3540,2360);
     
    // ----------------------------------------------------------------------------
     
    $y_dest=-590;
     
    for($i = 1; $i <= $n_y; $i++)
    	{
    	$x_dest=-590;
    	$y_dest=$y_dest+590;
     
    	for($j = 1; $j <= $n_x; $j++)
    		{
    		$var_fichier=$carte."-".$i.$j.".jpg";
    		$fichier=imagecreatefromjpeg($var_fichier);
     
    		$taille=getimagesize($var_fichier);
     
    		$x_dest=$x_dest+590;
     
     
    		imagecopyresampled($destination,$fichier,$x_dest,$y_dest,0,0,590,590,$taille[0],$taille[1]);
     
    		imagedestroy($fichier);
    		}
     
    	}
     
     
    imagejpeg($destination);
     
    imagedestroy($destination);
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/10/2011, 20h23
  2. Réponses: 4
    Dernier message: 01/12/2009, 03h58
  3. Générer une page à partir d'une image
    Par ekzouille dans le forum Langage
    Réponses: 3
    Dernier message: 22/12/2008, 11h57
  4. Réponses: 3
    Dernier message: 19/12/2005, 19h08
  5. Crée image à partir de plusieurs Timage
    Par spikto dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/08/2005, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo