[FPDF] Afficher image BLOB (stockée dans BDD) dans un pdf
Résolu/Fermé
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
-
Modifié par chantaussel le 29/06/2014 à 14:46
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 - 9 juil. 2014 à 11:32
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 - 9 juil. 2014 à 11:32
A voir également:
- Blob image
- Image iso - Guide
- Acronis true image - Télécharger - Sauvegarde
- Image iso windows 10 - Guide
- Faststone image viewer - Télécharger - Visionnage & Diaporama
- Comment agrandir une image - Guide
8 réponses
zermat
Messages postés
160
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
3 juin 2016
16
Modifié par zermat le 29/06/2014 à 20:11
Modifié par zermat le 29/06/2014 à 20:11
Essayez:
$image = file_get_contents('http://monsite.fr/afficheimmage.php?var=1'); //vérifier que allow_url_fopen = On dans php.ini $pdf->Image('var://image', 60, 30, 90, 0, 'JPEG');
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
30
7 juil. 2014 à 20:55
7 juil. 2014 à 20:55
Merci zermat :)
Me revoilà bien en retard, désolée...
J'ai essayé ce que tu proposes, et ça ne marche pas... Je n'ai pas eu de confirmation officielle, mais il semble que chez free allow_url_fopen = off, et on ne peut rien changer. J'ai lu aussi (mais c'est à confirmer) que free bloque certaines fonctions telles que file_get_contents().
Ceci étant dit je me pose les questions suivantes:
1/ Mon image est dans une BDD, pour l'afficher avec mon script php grâce au fichier afficheimmage.php?var=1, je vais déjà récupérer l'image en binaire, et la stoker dans une variable ($imagebdd). Il me semble que c'est ce que fait la fonction file_get_contents(), qui retourne une image sous forme de chaine? non?
Donc est-ce qu'on pourrait pas mettre tout simplement:
J'ai essayé, ça ne fonctionne pas non plus... mais peut-être est-ce à creuser?
2/ Je ne connait pas du tout le code: 'var://image', comment est-ce-que ça fonctionne?
3/ Pourquoi mettre le chemain en absolu dans file_get_contents()? En le mettant en relatif, est-ce-que ça ne résoudrait pas le problème d'url de allow_url_fopen = off
Merci d'avance!
Me revoilà bien en retard, désolée...
J'ai essayé ce que tu proposes, et ça ne marche pas... Je n'ai pas eu de confirmation officielle, mais il semble que chez free allow_url_fopen = off, et on ne peut rien changer. J'ai lu aussi (mais c'est à confirmer) que free bloque certaines fonctions telles que file_get_contents().
Ceci étant dit je me pose les questions suivantes:
1/ Mon image est dans une BDD, pour l'afficher avec mon script php grâce au fichier afficheimmage.php?var=1, je vais déjà récupérer l'image en binaire, et la stoker dans une variable ($imagebdd). Il me semble que c'est ce que fait la fonction file_get_contents(), qui retourne une image sous forme de chaine? non?
Donc est-ce qu'on pourrait pas mettre tout simplement:
$image = $imgbdd;Au lieu de
$image = file_get_contents('http://monsite.fr/afficheimmage.php?var=1');
J'ai essayé, ça ne fonctionne pas non plus... mais peut-être est-ce à creuser?
2/ Je ne connait pas du tout le code: 'var://image', comment est-ce-que ça fonctionne?
3/ Pourquoi mettre le chemain en absolu dans file_get_contents()? En le mettant en relatif, est-ce-que ça ne résoudrait pas le problème d'url de allow_url_fopen = off
Merci d'avance!
zermat
Messages postés
160
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
3 juin 2016
16
8 juil. 2014 à 02:42
8 juil. 2014 à 02:42
Si allow_url_fopen est désactivé essayez cette solution :
vous pouvez ajouter en fin de code :
unlink('mon-image.jpg');
file_put_contents('mon-image.jpg',$imgbdd); $pdf->Image('mon-image.jpg',60,30,90,0,'JPG');
vous pouvez ajouter en fin de code :
unlink('mon-image.jpg');
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
30
8 juil. 2014 à 10:03
8 juil. 2014 à 10:03
Merci de ta réponse Zermat,
Oui je m'étais dit qu'en dernier recours je passerai par cette solution, qui crée un fichier.jpg temporairement pour pourvoir inclure l'image sur mon pdf...
Mais je vais creuser encore un peu le script de MemImage de FPDF.
Et puis je ne comprends toujours pas pourquoi les solutions du dessus ne fonctionnent pas. Quelles sont les restrictions de la méthode Image de FPDF? Pourquoi est-ce que
ni
ni
ne fonctionnent?
Après tout afficheimmage.php?var=1 ça représente bien l'url de mon image?
Bon, ça fait beaucoup de questions...
Merci!
Oui je m'étais dit qu'en dernier recours je passerai par cette solution, qui crée un fichier.jpg temporairement pour pourvoir inclure l'image sur mon pdf...
Mais je vais creuser encore un peu le script de MemImage de FPDF.
Et puis je ne comprends toujours pas pourquoi les solutions du dessus ne fonctionnent pas. Quelles sont les restrictions de la méthode Image de FPDF? Pourquoi est-ce que
ni
$pdf->Image('http://monsite.fr/afficheimmage.php?var=1',60,30,90,0,'JPG');(en absolu)
ni
$pdf->Image('afficheimmage.php?var=1',60,30,90,0,'JPG');(en relatif)
ne fonctionnent?
Après tout afficheimmage.php?var=1 ça représente bien l'url de mon image?
Bon, ça fait beaucoup de questions...
Merci!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
30
8 juil. 2014 à 11:12
8 juil. 2014 à 11:12
Bon, je viens de vérifier avec phpinfo(), et allow_url_fopen est bien sur ON sur les pages perso de free...
Je vais vérifier mes variables (j'utilise des variables de sessions) et voir si elles se transmettent bien.
Merci
Je vais vérifier mes variables (j'utilise des variables de sessions) et voir si elles se transmettent bien.
Merci
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
30
8 juil. 2014 à 20:49
8 juil. 2014 à 20:49
Alors, pour conclure tout ça, même avec allow_url_fopen sur ON, free.fr a réussi à bloquer l'utilisation des "stream wrappers" ou "gestionnaires de flux".
Le script MemImage fonctionne parfaitement en local, mais plus sur un serveur de free...
Merci Olivier de FPDF!
Deux dernière solutions:
1/ passer par un fichier .jpg temporaire comme le proposait zermat
2/ virer toutes mes images de la BDD et tout mettre dans un dossier...
Je crois que je vais prendre la 2ème solution...
Merci pour votre aide!
Le script MemImage fonctionne parfaitement en local, mais plus sur un serveur de free...
Merci Olivier de FPDF!
Deux dernière solutions:
1/ passer par un fichier .jpg temporaire comme le proposait zermat
2/ virer toutes mes images de la BDD et tout mettre dans un dossier...
Je crois que je vais prendre la 2ème solution...
Merci pour votre aide!
zermat
Messages postés
160
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
3 juin 2016
16
Modifié par zermat le 9/07/2014 à 02:50
Modifié par zermat le 9/07/2014 à 02:50
Si vous ne voulez pas créer une image temporaire je vous propose cette classe :
créer un fichier fpdf2.php à côté du fichier fpdf.php avec ce contenu:
pour utiliser cette classe mettez:
Cette classe nécessite php-5.3 ou plus pour fonctionner
créer un fichier fpdf2.php à côté du fichier fpdf.php avec ce contenu:
<?php require_once("fpdf.php"); class FPDF2 extends FPDF { function _parsejpg($file) { $a = getimagesizefromstring($file); if(!$a) $this->Error('Missing or incorrect image file: '.$file); if($a[2]!=2) $this->Error('Not a JPEG file: '.$file); if(!isset($a['channels']) || $a['channels']==3) $colspace = 'DeviceRGB'; elseif($a['channels']==4) $colspace = 'DeviceCMYK'; else $colspace = 'DeviceGray'; $bpc = isset($a['bits']) ? $a['bits'] : 8; $data = $file; return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data); } } ?>
pour utiliser cette classe mettez:
require('fpdf2.php'); $pdf = new FPDF2(); . . . $pdf->Image($imagebdd,60,30,90,0,'JPG');
Cette classe nécessite php-5.3 ou plus pour fonctionner
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
30
9 juil. 2014 à 11:32
9 juil. 2014 à 11:32
Merci Zermat,
Mais ça ne fonctionne pas, la version php de free n'est que la 4.4, du coup il ne reconnait pas la fonction getimagesizefromstring()...
Merci quand même de ton aide, ça pourra surement servir à d'autres!
Mais ça ne fonctionne pas, la version php de free n'est que la 4.4, du coup il ne reconnait pas la fonction getimagesizefromstring()...
Merci quand même de ton aide, ça pourra surement servir à d'autres!