David_monchy
Messages postés214Date d'inscriptionlundi 20 mars 2006StatutMembreDernière intervention23 juin 2006
-
18 avril 2006 à 14:15
David_monchy
Messages postés214Date d'inscriptionlundi 20 mars 2006StatutMembreDernière intervention23 juin 2006
-
19 avril 2006 à 14:21
Salut à tous,
j'ai voulu faire une fonction permettant de redimensionner une image uploadée. Je me suis inspiré des fonctions de ce site, et tout marche parfaitement, à une exception près: si l'utilisateur fait son dessin sous paint et qu'il l'enregistre en .jpeg, la fonction ne marche pas car pour elle le type de l'image est bmp (j'ai fait un echo de ce que renvoyait getimagesize et le chiffre 6 est affiché, ce qui correspond au format bmp). je voulais donc savoir comment résoudre ce problème, qui est tout de même assez enervant pour les personnes novices qui pensent réellement envoyer des photo au format jpeg et qui se voient refuser le truc.
Voici ma fonction de redimensionnement:
function redim($photo,$pseudo){
//cette fonction redimensionne une image déjà uploadée
//on commence par récupérer les dimensions originales
$taille=getimagesize('../upload/'.$pseudo.'/'.$photo);
$largeur=$taille[0];
$hauteur=$taille[1];
$extension=$taille[2]; //renvoie 1 si c'est .gif, 2 si c'est .jpeg ou .jpg et 3 si c'est .png
//on veut redimensionner pour une largeur max de 250
//pour cela on regarde par combien il faut diviser la hauteur et la largeur
$var=$largeur/250;
if($var>=1){
//si var est inférieur à 1, cela veut dire que l'image est inférieure à 250 pixels de largeur, donc c'est inutile de la miniaturiser
$new_hauteur=round($hauteur/$var);
$new_largeur=round($largeur/$var);
echo $extension;
switch($extension){
case 1:
$image_in = imagecreatefromgif('../upload/'.$pseudo.'/'.$photo);
$image_out = imagecreatetruecolor($new_largeur, $new_hauteur);
break;
case 2:
$image_in = imagecreatefromjpeg('../upload/'.$pseudo.'/'.$photo);
$image_out = imagecreatetruecolor($new_largeur, $new_hauteur);
break;
case 3:
$image_in = imagecreatefrompng('../upload/'.$pseudo.'/'.$photo);
$image_out = imagecreatetruecolor($new_largeur, $new_hauteur);
break;
default:
echo 'Format non supporté! Seuls les jpeg, les gif et les png sont acceptés.';
?>
<script language="javascript">
window.setTimeout("window.top.location='../index2.php?page_centrale=compte/change_photo.php?h='+screen.height",2000);
</script>
<?php
break;
}//fin du switch
case 1:
imagegif($image_out,'../upload/'.$pseudo.'/'.$photo);
break;
case 2:
imagejpeg($image_out,'../upload/'.$pseudo.'/'.$photo);
break;
case 3:
imagepng($image_out,'../upload/'.$pseudo.'/'.$photo);
break;
default:
echo 'Format non supporté! Seuls les jpeg, les gif et les png sont acceptés.';
?>
<script language="javascript">
window.setTimeout("window.top.location='../index2.php?page_centrale=compte/change_photo.php?h='+screen.height",2000);
</script>
<?php
break;
}//fin du switch
}//fin du si la taille est inférieure à 250 pixels de large
}
Voila, je précise aussi qu'avant d'appeler cette fonction, les photos sont uploadées dans upload/$pseudo/, et que donc cette fonction écrase l'image initiale en enregistrant la miniature. Je précise aussi que lors de l'upload, les photos 'trafiquées' (qui ont été faites sous paint et enregistrées en jpeg) sont acceptées et parfaitement uploadées.
Merci d'avance
David
David_monchy
Messages postés214Date d'inscriptionlundi 20 mars 2006StatutMembreDernière intervention23 juin 2006 19 avril 2006 à 09:06
mais c'est ce que je fais. lors de l'upload je teste si le fichier n'est pas trop volumineux et si l'extension est en .jpeg ou png ou gif. mais le pb c'est que l'extension est en .jpeg, donc tout se passe bien lors de l'upload, et ensuite, grace à getimagesize, il s'apercoit que ce n'est pas du "vrai" jpg et qu'en fait c'est du bmp. Mais je voudrais quand meme accepter cette image, car pour le client, cette photo est du bon format puisqu'il la voit en jpg. Je ne sais vraiment pas comment faire.
David_monchy
Messages postés214Date d'inscriptionlundi 20 mars 2006StatutMembreDernière intervention23 juin 2006 19 avril 2006 à 13:44
ok je suis entièrement d'accord avec toi, mais comment transformer des images qui sont dans un format non compatible en format jpg? connaitrais-tu une fonction permettant de changer le type mime d'une image?
Vous n’avez pas trouvé la réponse que vous recherchez ?
mickaelpfr
Messages postés197Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention29 avril 20092 19 avril 2006 à 13:50
En gros ... :
tu fais une copie de l'image au format bmp grace a imagecopy() ( je te laisse regarder la doc c tout con ..
puis tu créer la nouvelle image qui sera traité pour tes miniature etc ...
$image = imagecreatetruecolor($x,$y);
imagejpeg($image);
David_monchy
Messages postés214Date d'inscriptionlundi 20 mars 2006StatutMembreDernière intervention23 juin 2006 19 avril 2006 à 14:21
je viens de regarder la doc de imagecopy(). ils n'indiquent pas comment faire une copie de l'image au format bmp. pour les autres types, j'utilisait imagecreatefromjpeg ou imagecreatefrompng, mais il n'existe pas d'imagecreatefrombmp, donc je ne peux pas copier l'image au format bmp