Pb redimension image jpeg/bmp

Signaler
Messages postés
214
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
23 juin 2006
-
Messages postés
214
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
23 juin 2006
-
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

Messages postés
197
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
29 avril 2009
2
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...
Messages postés
214
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
23 juin 2006

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.
Messages postés
197
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
29 avril 2009
2
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...
Messages postés
214
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
23 juin 2006

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?
Messages postés
197
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
29 avril 2009
2
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 :)
Messages postés
214
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
23 juin 2006

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