Charger, redimensionner et afficher une image en php

Bonjour à tous, :hello:
Sur une page PHP, j’ai un formulaire pour avec un type “file” pour sélectionner une image.
Ensuite, je veux afficher cette image sur la page (sans la stocker sur mon serveur). 8)

J’ai donc le code suivant :


$photo = $_FILES['photo'];
if ($photo['tmp_name']!="") {
    $infoPhoto = getimagesize($photo['tmp_name']);
    $imgPhoto = "data:" . $infoPhoto["mime"] . ";base64," . base64_encode(file_get_contents($photo['tmp_name']));
}

Pour une image jpg de 120ko, ça fonctionne correctement sous Firefox, mais pas sous IE : uniquement le haut de la photo (environ le premier quart) de la photo s’affiche, le reste non. :frowning:

Avez-vous une idée pourquoi ? C’est un problème de taille de cache ? :etonne2:

Mon idée était don d’essayer de redimensionner la photo avant de l’afficher, pour réduire sa taille.
Comment faire pour faire un redimensionnement par PHP ? :etonne2:

Merci d’avance de votre aide :slight_smile:

Alors… C’est pas évident de “dépanner” ce genre de bug car le problème peut venir de plusieurs endroits et cela peut différer selon le navigateur.

Le premier problème sur ce genre de bidouille c’est le cache, par exemple si ton image s’apelle à chaque fois “img.jpg” il y aura des problèmes de rafraichissement quand plusieurs image sont up à la suite. Tu peut generer une valeur unique et la caler à la fin du fichier, par exemple img.jpg?v=45454454542511212856 .

Après il y a le temps de traitement à gérer, peut être que ie charge trop vite et du coup l’image n’est pas traitée correctement. Essaye de limiter la bande passante de ton navigateur et refais des tests. Au pire si ta encore un bug, tu peut verifier le chargement de l’image en javascript pour la recharger une deuxième fois.

Ensuite pour faire un redim sous php il faut générer une image vide puis mettre l’ancienne image à la place avec le bon redim. J’ai pas le code en tête cherche sur google tu trouvera ton bonnheur. Sinon va sur la doc de php.

Il y a plusieurs méthode différentes pour faire ce que tu veut. Si tu affiche ta photo uniquement avec du php + html ( ou la balise img à pour src un .php ) je te conseille de créer un fichier php et de le traiter comme une image en utilisant des headers sans cache.

Merci pour ces infos riton :slight_smile:

Alors pour répondre dans l’ordre : je ne pense pas que ce soit un problème de cache ou de traitement. Car mon image est la bonne à chaque fois, et même si je fais une actualisation de la page, il n’y a toujours que la partie supérieure qui est affichée (uniquement sous IE), et ce pour des fichier dont la taille dépasse une certaine limite (assez faible, puisque avec une image de 120ko ça ne fonctionne pas). :-(:

J’avais donc pensé essayer de faire un redimensionnement pour voir si ça résout le problème (pour diminuer le poids de l’image). J’ai suivi ton conseil, et écrit le code suivant dans ma page principale :

<html>
<head></head>
<body>

<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="photo0">
<input type="submit">
</form>

<?php
$image1 = $_FILES['photo0'];
if ($image1['tmp_name']!="") {
    session_start ();
    $_SESSION['$image']=$image1;
    echo "<img src='test_img.php'>";
}
?>

</body>
</html>

et dans test_img.php :

<?php
session_start ();
header ("Content-type: image/png");
$image1=$_SESSION['$image'];
$image2=imagecreate(60,60);
imagecopyresized($image2,$image1,0,0,0,0,60,60,500,375);
imagepng($image2);
session_unset ();
session_destroy ();
?>

mais ça ne fonctionne pas :frowning: En fait, visiblement la variable de session n’est pas transmise. Car si je définis manuellement une image pour $image1 à la place de la récupérer par la variable de session, ça fonctionne. :o(

Comment faire alors pour utiliser les variable de session ? :slight_smile:
Merci d’avance
Edité le 26/03/2015 à 17:03

Il faut créer des variable de sessions pour les charger juste après sessions start. Ca fait longtemps que j’ai pas utilisé ce genre de truc. Je crois que si tu utilise session destroy dans ton fichier img ça va coincer pour le reste du fichier car il est inclus dans l’autre. Regarde la doc !

www.phpdebutant.org…

J’ai déjà utilisé les variables de SESSION, et dans mes autres cas ça fonctionne.
Il doit y avoir quelque chose de particulier dans ce cas.
Tant pis, les utilisateurs de IE seront limités à 30ko pour l’upload. Ils n’ont qu’a utiliser un vrai navigateur internet :stuck_out_tongue:

T’a essayé de passer par des libs / script du genre uploadify ?

Non, je ne connaissais pas.
Merci du tuyau, je vais regarder ça :slight_smile: