Script upload photo : Retournement d'images

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par JulienV, 12 Janvier 2017.

  1. JulienV
    JulienV WRInaute discret
    Inscrit:
    18 Mars 2010
    Messages:
    163
    J'aime reçus:
    0
    Bonsoir à tous :)

    Je rencontre un souci sur un script d'upload de photos...

    Il marche bien, il permet d'uploader une photo dans son format d'origine mais aussi, si nécessaire, de créer une miniature de cette photo (si ça dépasse 150px en hauteur ou en largeur).

    Cependant, pour certaines photos, je constate que les miniatures se "retournent" automatiquement, pourtant je n'utilise pas de fonction FLIP ou autre.

    Bref, je ne comprends pas pourquoi ça marche très bien avec la plupart des photos et pourquoi certaines miniatures se retournent...

    J'ai fait une erreur quelque part... Mais où ?

    Si vous avez une idée... je suis preneur !

    Merci par avance :)

    Code:
    // Fichier vide
    if(empty($_FILES['fichier_upload']['tmp_name']))
    {
    	echo 'Vous devez impérativement sélectionner la photo à uploader !';
    }
    // Problème d'upload du fichier
    elseif(!is_uploaded_file($_FILES['fichier_upload']['tmp_name']))
    {
    	echo 'Un problème empêche le transfert de cette photo !';
    }
    // Vérifier le format de l'image
    elseif(!$getimagesize=getimagesize($_FILES['fichier_upload']['tmp_name']))
    {
    	echo 'Format incorrect ! GIF, PNG ou JPG seulement !';
    }
    else
    {
    	// Traitement de l'image
    	list($fichier_largeur, $fichier_haut, $fichier_type, $fichier_attr)=getimagesize($_FILES['fichier_upload']['tmp_name']);
    
    	$fichier_poids_max=6500000;
    
    	$fichier_hauteur_max=12240;
    	$fichier_largeur_max=16320;
    
    	$fichier_dossier='../upload/';
    
    	$fichier_extension=substr($_FILES['fichier_upload']['name'], strrpos($_FILES['fichier_upload']['name'], '.')+1);
    
    	$fichier_nom_sans_extension=str_replace('.'.$fichier_extension, '', $_FILES['fichier_upload']['name']);
    
    	$fichier_nouveau_nom=date('YmdHis').'-'.$_FILES['fichier_upload']['name'];
    	$fichier_nouveau_nom2=date('YmdHis').'-'.$fichier_nom_sans_extension.'_[mini150].'.$fichier_extension;
    
    
    	// Photo trop lourde
    	if(filesize($_FILES['fichier_upload']['tmp_name']) > $fichier_poids_max)
    	{
    		echo 'Cette photo est trop lourde !';
    	}
    	// Type GIF, PNG ou JPG seulement
    	elseif($fichier_type!='1' && $fichier_type!='2' && $fichier_type!='3')
    	{
    		echo 'Format incorrect ! Choisissez une illustration au format GIF, JPG ou PNG seulement !';
    	}
    	// Image trop grande
    	elseif(($fichier_largeur >= $fichier_largeur_max) || ($fichier_haut >= $fichier_hauteur_max))
    	{
    		echo 'Cette image est trop grande !';
    	}
    	else
    	{
    		$taille_max=150;
    
    		if(($fichier_largeur > $taille_max) || ($fichier_haut > $taille_max))
    		{
    			if($fichier_haut > $fichier_largeur)
    			{
    				$fichier_mini_hauteur=$taille_max;
    				$fichier_mini_largeur=$fichier_largeur / ($fichier_haut / $taille_max);
    			}
    			else
    			{
    				$fichier_mini_hauteur=$fichier_haut / ($fichier_largeur / $taille_max);
    				$fichier_mini_largeur=$taille_max;
    			}
    
    			if($fichier_type=='1')
    			{
    				$fichier_source=imagecreatefromgif($_FILES['fichier_upload']['tmp_name']);
    				$fichier_reduit=imagecreate($fichier_mini_largeur, $fichier_mini_hauteur);
    				$fond_blanc=imagecolorallocate($fichier_reduit, 255, 255, 255);
    
    				$fichier_largeur_reduite=imagesx($fichier_reduit);
    				$fichier_haut_red=imagesy($fichier_reduit);
    
    				$nom_fichier_reduit=$fichier_nouveau_nom2;
    
    				imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_largeur_reduite, $fichier_haut_red, $fichier_largeur, $fichier_haut);
    
    				imagecolortransparent($fichier_reduit, $fond_blanc);
    
    				imagegif($fichier_reduit, $fichier_dossier.$nom_fichier_reduit);
    			}
    
    			if($fichier_type=='2')
    			{
    				$tmp_qualite=100;
    
    				$fichier_source=imagecreatefromjpeg($_FILES['fichier_upload']['tmp_name']);
    				$fichier_reduit=imagecreatetruecolor($fichier_mini_largeur, $fichier_mini_hauteur);
    
    				$fichier_largeur_reduite=imagesx($fichier_reduit);
    				$fichier_haut_red=imagesy($fichier_reduit);
    
    				$nom_fichier_reduit=$fichier_nouveau_nom2;
    
    				imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_largeur_reduite, $fichier_haut_red, $fichier_largeur, $fichier_haut);
    
    				imagejpeg($fichier_reduit, $fichier_dossier.$nom_fichier_reduit, $tmp_qualite);
    			}
    
    			if($fichier_type=='3')
    			{
    				$fichier_source=imagecreatefrompng($_FILES['fichier_upload']['tmp_name']);
    				$fichier_reduit=imagecreatetruecolor($fichier_mini_largeur, $fichier_mini_hauteur);
    
    				$fichier_largeur_reduite=imagesx($fichier_reduit);
    				$fichier_haut_red=imagesy($fichier_reduit);
    
    				$nom_fichier_reduit=$fichier_nouveau_nom2;
    
    				imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_largeur_reduite, $fichier_haut_red, $fichier_largeur, $fichier_haut);
    
    				imagepng($fichier_reduit, $fichier_dossier.$nom_fichier_reduit);
    			}
    		}
    		else
    		{
    			$nom_fichier_reduit=$fichier_nouveau_nom;
    
    			if(move_uploaded_file($_FILES['fichier_upload']['tmp_name'], $fichier_dossier.$fichier_nouveau_nom))
    			{
    
    			}
    			else
    			{
    				echo 'Problème pour uploader la photo... Contactez le développeur de l\'applicatio, !';
    			}
    		}
    
    
    		move_uploaded_file($_FILES['fichier_upload']['tmp_name'], $fichier_dossier.$fichier_nouveau_nom);
    
    
    		echo 'La photo a été uploadée avec succès !';
    	}
    }
    ?>
     
  2. JulienV
    JulienV WRInaute discret
    Inscrit:
    18 Mars 2010
    Messages:
    163
    J'aime reçus:
    0
    Au passage, si certains ont besoin d'un script simple pour uploader une photo et gérer la miniature... servez-vous !

    Si une âme charitable peut m'aider à corriger le code pour éviter le retournement (aléatoire), vous n'aurez qu'à appliquer la correction par la suite :)
     
  3. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    2 064
    J'aime reçus:
    367
    Les JPEG ont parfois une donnée fournie par les téléphones pour indiquer l'orientation. Certains logiciels font la rotation automatiquement en fonction de ça, d'autres non, donc ce que tu vois est plutôt qu'il n'y a pas eu de rotation, la miniature perdant l'information exif, mais que l'image d'origine t'apparaît tournée parce que tu la visionne avec un logiciel qui le gère.
    Donc il faut ajouter quelque chose comme ça pour retourner la miniature (et il faudrait le faire sur l'originale aussi) :

    Code:
     if($fichier_type=='2')
    {
    			$exif = exif_read_data($_FILES['fichier_upload']['tmp_name']);
    			
    			if (!empty($exif['Orientation']))
    			{
    				switch ($exif['Orientation'])
    				{
    					case 3:
    						$fichier_source = imagerotate($fichier_source, 180, 0);
    						break;
    
    					case 6:
    						$fichier_source = imagerotate($fichier_source, -90, 0);
    						break;
    
    					case 8:
    						$fichier_source = imagerotate($fichier_source, 90, 0);
    						break;
    				}
    			}
    
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 182
    J'aime reçus:
    351
    NB: $fichier_extension et $fichier_nom_sans_extension peut être obtenu plus proprement via pathinfo()
     
Chargement...
Similar Threads - Script upload photo Forum Date
Script PHP upload d'images Développement d'un site Web ou d'une appli mobile 24 Juillet 2012
un script d'upload image qui adhère au sol ? Développement d'un site Web ou d'une appli mobile 27 Février 2010
[résolu] Script d'upload Développement d'un site Web ou d'une appli mobile 10 Mars 2009
Un super script de multiupload de fichiers Développement d'un site Web ou d'une appli mobile 18 Novembre 2008
script d'upload d'images et vidéos Développement d'un site Web ou d'une appli mobile 15 Juin 2008
Meilleur Script Top Site et Upload Développement d'un site Web ou d'une appli mobile 20 Janvier 2008
script d'UPload comme rapidshare ou megaupload Développement d'un site Web ou d'une appli mobile 21 Septembre 2007
A propos des scripts d'upload de fichiers Développement d'un site Web ou d'une appli mobile 21 Mars 2007
amélioration script upload php help Développement d'un site Web ou d'une appli mobile 6 Février 2007
cherche script upload spécial Développement d'un site Web ou d'une appli mobile 19 Janvier 2007
script upload Administration d'un site Web 15 Novembre 2006
Script PHP pour l'upload .... Développement d'un site Web ou d'une appli mobile 24 Juillet 2006
script php pour uploader un fichier ?? Développement d'un site Web ou d'une appli mobile 16 Juillet 2006
Script upload d'images quelle solution ? Développement d'un site Web ou d'une appli mobile 13 Juillet 2006
Script d'upload d'images ? Administration d'un site Web 25 Septembre 2004
Balise meta name description non prise en compte par Google Référencement Google 19 Septembre 2022
Deux questions pour deux scripts javascript. Développement d'un site Web ou d'une appli mobile 29 Août 2022
Search Console Comment réparer l'affichage de Google dans la mauvaise balise de description Meta ? Problèmes de référencement spécifiques à vos sites 19 Août 2022
Meta description différente de celle choisie (Rank Math + Qwant) Problèmes de référencement spécifiques à vos sites 25 Juillet 2022
Pages dynamiques avec Javascript ? Développement d'un site Web ou d'une appli mobile 14 Juillet 2022