79 votes

Renvoyer une page PHP sous forme d'image

Je suis en train de lire un fichier image (.jpeg pour être exact), et le 'echo' retour à la page de sortie, mais ont est d'afficher une image...

mon index.php a un lien de l'image comme ceci:

<img src='test.php?image=1234.jpeg' />

et mon script php fait ceci:

1) lire 1234.jpeg 2) echo contenu du fichier... 3) j'ai un sentiment que j'ai besoin de retourner la sortie de retour avec un mime-type, mais c'est là que je me suis perdu

Une fois que j'ai cela, je vais être de retirer le nom de fichier d'entrée tous ensemble et de le remplacer par l'id de l'image.

Si je suis pas clair, ou vous avez besoin de plus d'informations, s'il vous plaît répondre.

135voto

Martin Geisler Points 44779

Le Manuel PHP a cet exemple:

<?php
// open the file in a binary mode
$name = './img/ok.png';
$fp = fopen($name, 'rb');

// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

// dump the picture and stop the script
fpassthru($fp);
exit;
?>

Les points importants que vous devez envoyer à un Type de Contenu d'en-tête. Aussi, vous devez être prudent de ne pas inclure tout l'espace blanc supplémentaire (comme des retours à la ligne) dans votre fichier avant ou après l' <?php ... ?> tags.

Comme suggéré dans les commentaires, vous pouvez éviter le danger de l'espace blanc supplémentaire à la fin de votre script en omettant l' ?> balise:

<?php
$name = './img/ok.png';
$fp = fopen($name, 'rb');

header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

fpassthru($fp);

Vous avez encore le besoin d'éviter soigneusement les espaces blancs au début du script. Un point particulièrement délicat forme de l'espace blanc est un UTF-8 BOM. Pour éviter cela, assurez-vous d'enregistrer votre script comme "ANSI" (bloc-notes) ou "ASCII" ou "UTF-8 sans signature" (Emacs) ou similaire.

3voto

Drew LeSueur Points 2507

Cela devrait marcher. Cela peut être plus lent.

 $img = imagecreatefromjpeg($filename);
header("Content-Type: image/jpg");
imagejpeg($img);
imagedestroy($img);
 

-7voto

Joe Bubna Points 253

Une autre option facile (pas mieux, mais différente) si vous ne lisez pas dans une base de données est d’utiliser une fonction pour afficher tout le code pour vous ... Remarque: Si vous vouliez aussi que php lise les dimensions de l’image et donne que pour le client pour un rendu plus rapide, vous pouvez facilement le faire aussi avec cette méthode.

 <?php
  Function insertImage( $fileName ) {
    echo '<img src="path/to/your/images/',$fileName,'">';    
  }
?>

<html>
  <body>
    This is my awesome website.<br>
    <?php insertImage( '1234.jpg' ); ?><br>
    Like my nice picture above?
  </body>
</html>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X