[resolu]image dynamique en php

image dynamique en php [resolu] - PHP - Programmation

Marsh Posté le 22-01-2008 à 12:11:48    

Bonjour à tous,  
 
Je suis sur un Intranet. J'ai une table SQL du personnel. Je souhaite afficher la photo du personnel à côté de leur nom. Tout cela dans un fichier PDF.
J'utilise FPDF. POur afficher une image on utilise la fonction Image('logo.jpg').
 
Le problème est que mon image est générée par un fichier php car l'info est dans la base de données. si je replace "logo.jpg" par "photo.php?cle=1" cela m'affiche une erreur que je comprends.
 
J'ai cherché, je crois que la solution est d'enregistrer l'image générée sur mon serveur. Mais comment je dois procéder? Je ne sais pas comment utiliser mon fichier "photo.php" pour qu'à la place d'afficher une image, il me l'enregistre dans un repertoire précis (pour que je puisse l'appeler dans mon php après).
 
Merci par avance
Jenny
 
PS : pour afficher la photo dans une page normale -> img src="photo.php?cle=1"


Message édité par jenny50 le 23-01-2008 à 13:18:45
Reply

Marsh Posté le 22-01-2008 à 12:11:48   

Reply

Marsh Posté le 22-01-2008 à 13:36:40    

En effet est ce que les photos changent souvent :??: Et donc est ce que ça vaut le coup de stocker ça en base :??:
 
Sinon, il te suffit de récupérer l'image et de fournir l'image, la vraie :spamafote: T'as tout un tas de fonctions pour ça ici

Reply

Marsh Posté le 22-01-2008 à 13:54:26    

merci pour cette réponse. Et quand tu utilises la fonction :  
imagepng($image);
comme je le fais, pourrais-tu m'indiquer où se trouve l'image créé pour que je puisse la désigné pour le PDF?

Reply

Marsh Posté le 22-01-2008 à 14:31:18    

jenny50 a écrit :

merci pour cette réponse. Et quand tu utilises la fonction :  
imagepng($image);
comme je le fais, pourrais-tu m'indiquer où se trouve l'image créé pour que je puisse la désigné pour le PDF?


tu peux utiliser le seconde paramètre de cette fonction pour enregistrer l'image à l'endroit de ton choix...par exemple un répertoire temporaire le temps de générer ton pdf...;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-01-2008 à 15:42:01    

Ou carrément ne pas l'enregistrer et balancer directement vu que tu utilises fpdf donc du php directement :spamafote:

Reply

Marsh Posté le 22-01-2008 à 15:44:30    

leflos5 a écrit :

Ou carrément ne pas l'enregistrer et balancer directement vu que tu utilises fpdf donc du php directement :spamafote:


oui, aussi...m'enfin je sais pas ce qu'attend fpdf moi hein, et je voulais pas compliquer le truc.[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-01-2008 à 17:10:42    

leflos5 a écrit :

Ou carrément ne pas l'enregistrer et balancer directement vu que tu utilises fpdf donc du php directement :spamafote:


skeye a écrit :

oui, aussi...m'enfin je sais pas ce qu'attend fpdf moi hein, et je voulais pas compliquer le truc.[:joce]


 
Je te propose donc au préalable de lire la photo de tous les membres du personnel (fopen...etc) et d'enregistrer ce flux dans ta bd.
Dans ta table utilisateur tu auras par exemple : cle, nom, photo.
 
Puis tu crée un fichier getphoto.php qui prend la clé de la personne en paramètre (par exemple getphoto.php?cle=1), qui sélectionne dans la BD le flux d'image correspondant à cette personne, et qui l'écrit avec le bon header et tout le tralala pour indiquer que c'est une image.
 
Puis dans ton générateur de pdf tu fais un truc du genre (je me souviens plus du nom des méthodes) :
$pdf->drawimage('getphoto.php?cle='.$ma_cle_utilisateur)
 
:)


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 22-01-2008 à 17:21:23    

CyberDenix > Et là, ça ne marche pas par ce qu'en lisant un fichier local, on exécute pas le code php qu'il contient.
 
jenny50 > Va faire un tour sur le site de fpdf ( www.fpdf.org ) et récupère toi le script 45 "Import d'image en mémoire". Ensuite tu fait un include sur le fichier contenant ce script et tu crés l'objet comme indiqué dans l'exemple (ton "$pdf = new fpdf()" devient "$pdf=new MEM_IMAGE();" ) . Ca te permettra d'utiliser des images contenu dans une variable php (et donc celle récupéré directement dans la base de donnée)

Reply

Marsh Posté le 22-01-2008 à 18:12:31    

omega2 a écrit :

CyberDenix > Et là, ça ne marche pas par ce qu'en lisant un fichier local, on exécute pas le code php qu'il contient.


 
J'ai parlé trop vite... merci de me détromper !  :whistle:


Message édité par CyberDenix le 22-01-2008 à 18:13:43

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 23-01-2008 à 09:14:30    

Omega1 : je te remercie pour le conseil du script 45 sur FPDF, mais je ne le comprends pas trop.  
 
Je reprends :  
dans ma base de données j'ai bien une table nom, prenom, photo (où photo est de type 'lo' pgsql)
 
Voici le lien que j'utilise quand j'affiche ma photo habituellement :  

Code :
  1. <img src="../admin/photo_uti.php?oid='.$r->pers_photo.'&larg=70">


 
Dans photo_uti.php j'ai ça :  

Code :
  1. header ("Content-type: image/png" );
  2. $image = imagecreate($new_larg,$new_larg);
  3. $orange = imagecolorallocate($image, 255, 128, 0); // Le fond est orange (car c'est la première couleur)
  4. $bleu = imagecolorallocate($image, 0, 0, 255);
  5. $bleuclair = imagecolorallocate($image, 156, 227, 254);
  6. $noir = imagecolorallocate($image, 0, 0, 0);
  7. $blanc = imagecolorallocate($image, 255, 255, 255);
  8. imagecolortransparent($image, $orange); // On rend le fond orange transparent
  9. imagepng($image);


 
Comment je peux faire pour afficher ma photo dans le fichier php suivant :  

Code :
  1. $pdf=new FPDF();
  2. $pdf->AddPage();
  3. $pdf->SetFont('Arial','B',12);
  4. //filiale
  5. $pdf->Cell(20,10,'FILIALE : ',0,0,'L',0,'');
  6. $pdf->SetFont('Arial','',12);
  7. $pdf->Cell(40,10,strtoupper(trim($r->fil_lib)),0,0,'L',0,'');
  8. //nom agent
  9. $pdf->SetFont('Arial','B',12);
  10. $pdf->Cell(130,10,strtoupper(trim($r->ag_nom)),0,1,'R',0,'');
  11. $pdf->Output();


 
Merci beaucoup de m'aider, ça fait 2 jours que je suis dessus et je galère vraiment.

Reply

Marsh Posté le 23-01-2008 à 09:14:30   

Reply

Marsh Posté le 23-01-2008 à 10:35:12    

Vu ton fichier photo_uti.php, ce que tu essaye de faire ressemble énormément à l'exemple du script 45.
 
En partant de ton script de création de pdf :

  • A la place du "$pdf=new FPDF();", tu mets les deux lignes "require('mem_image.php');" et "$pdf=new MEM_IMAGE();". (comme au début de l'exemple du script 45)
  • A l'endroit que tu veux (tant que c'est avant le "$pdf->Output();" ) tu mets le code de création de ton image (sans le header et sans le "imagepng($image);" )
  • Entre ce code là et le "$pdf->Output();" tu rajoutes les deux lignes de l'exemple du script 45 qui sont précédé du commentaire "//Affichage" en les adaptant à ton code (mettre le bon nom de variable et les bonnes dimensions).


En faisant ça, t'auras ton image dans ton fichier pdf.

Reply

Marsh Posté le 23-01-2008 à 10:53:30    

Je te remercie énormément OMEGA2. Tu expliques bien et ça fonctionne bien.

Reply

Marsh Posté le 23-01-2008 à 11:04:17    

OMEGA2 : je voudrais maintenant utiliser le script 70 de FPDF, toujours sur le même document. J'ai procédé de la même manière à savoir :

  • A la place du "$pdf=MEM_IMAGE();", j'ai mis les deux lignes "require('html_table.php');" et "$pdf=new PDF_HTML_Table();". (comme au début de l'exemple du script 70)  
  • A l'endroit que je veux (tant que c'est avant le "$pdf->Output();" ) j'ai mis ce code :  
Code :
  1. $htmlTable.='<table align="center" width="100%" cellpadding="0" cellspacing="0" border="0">';
  2. $htmlTable.=' <tr>';
  3. $htmlTable.='  <td class="fichag_gauche" width="30%"><b>FILIALE</b> : '.$r->fil_lib.'<br><b>AFFAIRE</b> : '.$r->conc_lib.'<br><b>CANTON</b> : '.$r->cant_lib.'<br><b>VENDEUR VN</b> : '.substr($r->pers_prenom,0,1).'. '.$r->pers_nom.'<br><b>VENDEUR PR</b> : '.substr($r_vpr->pers_prenom,0,1).'. '.$r_vpr->pers_nom.'<br></td>';


  • Entre ce code là et le "$pdf->Output();" j'ai rajouté les deux lignes de l'exemple du script 70 :  
Code :
  1. $pdf->SetFont('Arial','',10);
  2. $pdf->WriteHTML("$htmlTable" );


 
Et tout ça ne fonctionne pas!!!
Ah si c'était si simple !!!
 
Merci de ton aide

Reply

Marsh Posté le 23-01-2008 à 11:43:33    

Les scripts sont fait pour ne pas dépendre de la présence d'un autre script mais uniquement de fpdf : ils étendent tous la classe FPDF en lui rajoutant des éléments. Si tu regardes les sources des différents scripts tu auras une ligne qui commence par "class" et qui finis par "extends FPDF". C'est cette ligne là qui indique cet héritage de FPDF par les classes des scripts.
 
Si tu veux utiliser deux scripts pour un même pdf, alors il faudra, dans l'un des deux, remplacer le "FPDF" de cette ligne là par le nom de la classe de l'autre script (par exemple "extends FPDF" deviendrait "extends MEM_IMAGE" dans le script 70) Il faut aussi rajouter un require (par exemple "require('mem_image.php');" ) dans le fichier que tu modifies pour être sur de charger tout ce qui sera nécessaire à cette version modifié sans devoir le faire dans ton source à toi.
En faisant ainsi tu obtiendras une classe qui contiendra à la fois ce qu'il faut pour pour mettre des images dans le fichier (capacité obtenu par héritage de la classe du script 70) et ce qu'il faut pour créer une table à partir d'une table html (capacité propre à la classe du script 70).
 
A noter que si tu veux utiliser également ce qui est dans d'autres scripts, il faudra continuer à créer, de la même manière, des dépendances entre les classes des différents scripts.

Reply

Marsh Posté le 23-01-2008 à 11:48:39    

ok JE TE REMERCIE ENORMEMENT

Reply

Marsh Posté le 23-01-2008 à 11:50:46    

Moins fort, d'autres risquent d'entendre. :P

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed