Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > Imagick
Imagick Forum d'entraide pour l'extension Imagick permettant de manipuler des images en PHP (port de l'API ImageMagick).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/02/2005, 09h30   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 27
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 27
Points : 12
Points : 12
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
fichtre! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2005, 10h16   #2
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
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)
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2005, 14h59   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 27
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 27
Points : 12
Points : 12
merci bien, je suis preneur des sources que j'adapterais, car même avec php.net je patauge.

Eric
fichtre! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2005, 22h48   #4
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
chose promis chose due

Code :
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.
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2005, 09h25   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 27
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 27
Points : 12
Points : 12
merci adjanakis je regarde ton script et l'adapte

eric
fichtre! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2005, 15h21   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 27
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 27
Points : 12
Points : 12
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 :
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 ...
fichtre! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 11h09   #7
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
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?
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2005, 11h32   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 27
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 27
Points : 12
Points : 12
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
fichtre! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2005, 15h32   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 27
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 27
Points : 12
Points : 12
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 :
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);
?>
fichtre! est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h24.


 
 
 
 
Partenaires

Hébergement Web