Afficher une image par défaut si l'image distante n'existe p

kassius250
Invité n'ayant pas de compte PHPfrance

25 août 2010, 13:28

Bonjour à tous,

Voici mon problème : J'ai une portion de code permettant le redimensionnement d'images distantes (pour obtenir des miniatures). Cela fonctionne très bien, nénamoins, je souhaiterais pouvoir afficher une image par défaut dans le cas où l'image distante n'existe pas.

Voici mon code :

dans le programme principal :
echo " <br /><img src=image_miniature.php?src=$image ></img><br />";

voici le contenu de image_miniature.php :
<?php
$src = $_GET['src'];
$source = ImageCreateFromJpeg($src);
$srcheight = imagesy($source);
$srcwidth = imagesx($source); // or $srcwidth = 1;

$newheight = 45 ;
$ratio = 45 / $srcheight;
$newwidth = ceil($srcwidth * $ratio);

$thumb = ImageCreateTrueColor($newwidth, $newheight);
$source = imagecreatefromjpeg($src);
ImageCopyResampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $srcwidth, $srcheight);
ImageJpeg ($thumb);
?>

Avez-vous une piste pour me permettre l'affichage d'une image par défaut si l'image ($image) n'est pas disponible/n'existe pas ?

Merci par avance

ViPHP
xTG
ViPHP | 7331 Messages

25 août 2010, 15:20

if( !file_exists($src) )
  $src = ""; // chemin de l'image par défaut
Tout simplement :)

kassius250
Invité n'ayant pas de compte PHPfrance

25 août 2010, 17:01

Bonjour,

Merci pour ta réponse. Néanmoins file_exists($image) me retourne toujours 0. Mon image par défaut est donc affichée même lorsque l'image source existe.

As-tu une autre idée?

ViPHP
xTG
ViPHP | 7331 Messages

25 août 2010, 17:27

L'image se trouve-t-elle sur ton serveur ?

Eléphant du PHP | 314 Messages

25 août 2010, 17:33

Si c'est une URL distante,
function url_exists($url) {
	$h = get_headers($url);
	$status = array();
	preg_match('/HTTP\/.* ([0-9]+) .*/', $h[0] , $status);
	return ($status[1] == 200);
}
Cordialement,
Julien - http://laravel.fr/

kassius250
Invité n'ayant pas de compte PHPfrance

25 août 2010, 19:33

Merci pour cette réponse. Le code fonctionne bien.

Cependant cette portion de code ralenti énormément le chargement de ma page (10 secondes de chargement supplémentaires pour 25 images). N'y aurait-il pas un moyen de valider si l'image existe ou non par l'utilisation de test sur l'image (taille de l'image avec imagesy($source) par exemple)?

Merci d'avance

ViPHP
xTG
ViPHP | 7331 Messages

25 août 2010, 20:38

Vérifies le retour de ImageCreateFromJpeg, s'il est égal à false c'est qu'il y a eu impossibilité de récupérer l'image.

ViPHP
ViPHP | 1136 Messages

25 août 2010, 21:25

Sinon , tu peux afficher ta page en brut , et gérer test tests via des requêtes ajax .

Avec une petite gestion de cache , ca doit le faire ....

-> ta page se charge , et lance de façon asynchrone ttes les requetes ajax pour checker les img
-> Si en cache ok , le résultat sera presque immédiat
-> sinon , le test d'une image ne retardera pas les tests des autres images , puisque tout sera fait en parallèle ..

Bon , ce n'est qu'une idée .. :) à creuser .. ou pas ;)

Ch.