Forum de discussion et d'aide au php
Vous n'êtes pas identifié.
|
Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides. FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans. Proposez vos news : si vous avez un evenement à annoncer le chat : venez discuter de php. |
||
Bonjour,
j'ai un script qui permet d'envoyer des images sur le serveur et qui incruste un logo (img.png) dans les images jpg.
Tout marche parfaitement bien sur firefox, mais avec iexplorer, l'inscrusation n'a pas lieu
L'upload et la sauvegarde sur le serveur se déroule très bien dans tous les navigateurs...
Problème dans mon formulaire d'envoi? dans mon test de determination d'une image jpg?
vous pouvez voir le script en action sur http://bigjet.free.fr/upload et tester que les jpg ne s'incrustent pas quand on utilise IExplorer...
<FORM ENCTYPE="multipart/form-data" ACTION="index.php" METHOD="POST">
Votre image: <INPUT TYPE="file" NAME="userfile">
<INPUT TYPE="submit" VALUE="Upload">
</FORM>
<?php
$path = "images/";
$max_size = 20000;
if (!isset($HTTP_POST_FILES['userfile'])) exit;
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
if ($HTTP_POST_FILES['userfile']['size']>$max_size) { echo "L'image que vous avez sélectionné est trop lourde<br>\n"; exit; }
if (($HTTP_POST_FILES['userfile']['type']=="image/gif") || ($HTTP_POST_FILES['userfile']['type']=="image/pjpeg") || ($HTTP_POST_FILES['userfile']['type']=="image/jpeg"))
{
if (file_exists($path . $HTTP_POST_FILES['userfile']['name']))
{
echo "L'image que vous avez selectionné existe dejà. Veuillez renommer le fichier ou choisir une autre image.<br>\n";
exit;
}
$res = copy($HTTP_POST_FILES['userfile']['tmp_name'], $path .$HTTP_POST_FILES['userfile']['name']);
if ($HTTP_POST_FILES['userfile']['type']=="image/jpeg")
{
//merci à matheo!
$source = imagecreatefrompng("img.png"); // Le logo est la source
$destination = imagecreatefromjpeg($path .$HTTP_POST_FILES['userfile']['name']); // La photo est la destination
// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);
// On veut placer le logo en bas à droite, on calcule les coordonnées où on doit placer le logo sur la photo
$destination_x = $largeur_destination - $largeur_source;
$destination_y = $hauteur_destination - $hauteur_source;
// On met le logo (source) dans l'image de destination (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60);
// On affiche l'image de destination qui a été fusionnée avec le logo
imagejpeg($destination, $path.$HTTP_POST_FILES['userfile']['name']);
}
if (!$res)
{
echo "L'upload de l'image a échoué pour une raison inconnue!<br>\n";
exit;
}
else
{
echo "Image uploadée avec succès";
}
else { echo "Mauvais format d'image<br>\n"; exit; }
}
?>
Hors ligne
Oui mais la méthode post est initialement envoyé par le navigateur non?
Sinon pourquoi est-ce que le script ne marche pas comme supposé avec IExplorer?
Sur Mozilla il y a aucun problème, comme on peut le vérifier avec le lien que j'ai mis plus haut
Hors ligne
Sinon, est qu'il y a moyen d'utiliser la fonction imagecreatefromjpeg() directement à partir d'un envoi de fichier?
Moi ce que je fais c'est que j'upload l'image sur le serveur et ensuite je réalise le traitement dépendemment du type d'image.
Hors ligne
KaZhaR a écrit:
je viens de tester, mes deux images ont été correctement envoyées.
(Ciel3 : avec firefox; Ciel4 : avec ie)
Dans Ciel.4 , il n'y a pas eu d'incrustations...

Hors ligne
pardon :?
tu fait l'incrustation avant d'enregistrer l'image la non ?
si tu l'enregistre, et que tu fait l'incrustation sur l'image deja enregistrée ca donne quoi ?
(encore une fois, c vraiment bizarre que ie refuse de faire cela étant donné que c'est le serveur qui le fait...)
Hors ligne
Si mon image est valide, je l'enregistre sur le serveur:
$res = copy($HTTP_POST_FILES['userfile']['tmp_name'], $path .$HTTP_POST_FILES['userfile']['name']);
Une fois qu'elle est enregistrée, si c'est un jpg, je l'incruste
$destination = imagecreatefromjpeg($path .$HTTP_POST_FILES['userfile']['name']);
Je crée une image jpg à partir de celle qui est présente sur le serveur.
J'ai pas reussi à utiliser la fonction imagecreatefromjpeg("adresse de l'image") directement à partir du fichier envoyé.
Hors ligne
JE viens de faire le test avec Crazy Browser, idem, pas d'incrustation... noyeau ie ? c'est quand même extrêmement étrange car le navigateur n'a rien à voir avec le traitement de l'image...
Hors ligne
C'est un véritable mystère...
je comprend plus rien...
Mais j'ai reussi à identifier le probleme! C'est mieux que rien... ![]()
le probleme est quand je teste le type d'image:
if ($HTTP_POST_FILES['userfile']['type']=="image/jpeg")
{
traitement inscrustation
}si j'enleve la condition, l'inscrustation se deroule sans problemes... Mais j'ai besoin de tester le type d'image car une image gif produira des erreurs si jamais elle est traitée de cette facon ![]()
Maintenant reste à résoudre le probleme et à trouver une alternative pour que ca marche sur Ie...
Hors ligne
C'est bon j'ai réussi!
Une fois que j'ai uploadé, je sauvegarde la variable $HTTP_POST_FILES['userfile']['type'] dans une autre variable.
Et ensuite je fais mon test à partir de la nouvelle variable ![]()
$type_image = $HTTP_POST_FILES['userfile']['type'];
.....
if ($type_image=="image/jpeg")
en tout cas marche ![]()
P-e que c'est Ie qui detruit la variable trop rapidement??
Hors ligne