Pb redimension image jpeg/bmp

David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 juin 2006 - 18 avril 2006 à 14:15
David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 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


imagecopyresampled($image_out,$image_in,0,0,0,0,$new_largeur,$new_hauteur,$largeur,$hauteur);

switch($extension){

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

6 réponses

mickaelpfr Messages postés 197 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 29 avril 2009 2
18 avril 2006 à 17:46
tu devrais effectuer un test au moment de l'upload, et une fois ton image uploader la transformer en jpg AVANT de faire la miniature...
0
David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 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.
0
mickaelpfr Messages postés 197 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 29 avril 2009 2
19 avril 2006 à 12:41
okip on récapitule :)

- Soumission de l'image
- Vérification de l'extension
- Upload
- Vérification du véritable format
- Traitement de l'image

Donc pour palier a ton souçis , tu dois accepter les bmp et transformer cette image en jpg :)

ce qui donne une fonction supplémentaire
- Soumission de l'image

- Vérification de l'extension

- Upload

- Vérification du véritable format
- Si autre format que ceux stipulé, on transforme en jpg

- Traitement de l'image

Voila en espérant t'avoir éclairé , c'est a ma connaissance la seule solution...
0
David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mickaelpfr Messages postés 197 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 29 avril 2009 2
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);

voila les grandes lignes :)
0
David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 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
0
Rejoignez-nous