IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[ImageMagick] Redimensionner une image JPEG PNG GIF


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut [ImageMagick] Redimensionner une image JPEG PNG GIF
    Bonjour,

    J'ai crée cette fonction afin qu'elle me redimensionne une image uploadé par un utilisateur ! En mème temps le fichier redimentionné doit etre un gif mais l'utilisateur peut uploader des jpg gif ou png .

    Pouvez-vous me certifier que ma fonction me retourne bien une image GIF quand l'utilisateur upload un JPG ? Car la fonction retourne toujour une image redimentionnée comme nom.JPG. Si l'image retournée est bien un gif je n'ai plus qu'a renommer nom.jpg en nom.gif.

    Voila ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    function redim_avatare($im_src,$im_dest)
    {
     
        	$size = getimagesize($im_src); // Recuperation de la taille de l'image source		    	
    	$src_w = $size[0]; // Largeur de l'image source				
    	$src_h = $size[1]; // Hauteur de l'image source
     
    	$pourcent = ((160 * 100) / $src_w) / 100; // Calcul du pourcentage de reduction de la largeur et de la hauteur pour 160 px de largeur
     
    	$dst_w = floor($src_w*$pourcent); // Largeur de l'image de destination
    	$dst_h = floor($src_h*$pourcent); // Hauteur de l'image de destination
    	$dst_im = imagecreatetruecolor($dst_w,$dst_h); // Retourne une image noire
     
    	$ext = strrchr($this->AvatarUser['name'], '.');
     
    	if($ext == '.jpg' || $ext == '.jpeg')
    		$src_im = imagecreatefromjpeg($im_src); // Retourne un identifiant d'image représentant une image obtenue à partir de l'image source
    	elseif ($ext == '.gif')
    		$src_im = imagecreatefromgif($im_src);
    	elseif ($ext == '.png')
    		$src_im =imagecreatefrompng($im_src);
     
    imagecopyresampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h); // Copie, Redimentionne et rééchantillonne l'image source vers l'image destination
     
    	$ext = strrchr($dst_im, '.'); // Recherche l'extention du fichier
     
    	imagegif($dst_im, $im_dest);
     
    	imagedestroy($dst_im); // Libère toute la mémoire associée à l'image image
    	imagedestroy($src_im); // libère toute la mémoire associée à l'image image
     
    }
    Merci beaucoup

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    Bien a la limite sa m'intéresse vu que je dois faire apepré la même chose donc je vais test pour développer ma propre appli et je te dis

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Bonjour,

    Si tout se passe sans encombres, imagegif() te retournera toujours une image au format gif.

    Dans ton code il n'y a pas de trace d'un enregistrement de cette image ... Elle garde donc son nom original / temporaire jusqu'a ce que tu lui en donnes un autre.

    Voir du côté de move_uploaded_file() par exemple.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut
    Ok je voulais juste savoir si l'image retourné par imagegif été bien au format gif !

    Pour le nom et le fonction move_uploaded_file() j'ai deja mi en place et tout fonctionne

    Encore merci

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Re,

    Si tu fais pas mal de php en ce moment, ou même à l'avenir, je te conseille de te rendre dès que tu en as besoin sur la doc officielle, elle est excellente, bien fournie, et les messages des utilisateurs peuvent parfois bien aider (même si la plupart sont en anglais).

    Tu aurais eu une réponse rapide à ta question sans t'embêter

    Bonne continuation !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    bonjour,

    je comprend pas l'utilité de move_uploaded_file().

    Il n'est pas plus facile de rajouter l'extension voulu directement dans $im_dest

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imagegif($dst_im, $im_dest);


    J'arrive à renommer le fichier ainsi mais je sais pas si il vault mieux utiliser move upload file

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut
    cette fonction permet de copier une image uploadée c'est a dir qui se trouve dans un dossier temporaire vers un dossier ou elle ne sera pas supprimé par le système... tu peux tres bien utiliser la fonction copy pour faire ce genre d'action !

    alors que la fonction imagegif crée une nouvelle image au format gif exclusivement !

    voila ma fonction final ! qui recupère une image source le redimensionne la convertie en gif et remplace son extension si besoin est !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    function redim_avatar($im_src, $im_dest)
    	{
    		global $const; // Variable de type tableau associatif qui contient les paramètres de configuration
    		$ResErreur = false;
     
    		$size = getimagesize($im_src); // Recuperation de la taille de l'image source		    	
    		$src_w = $size[0]; // Largeur de l'image source				
    		$src_h = $size[1]; // Hauteur de l'image source
    		$ext = strrchr($im_src, '.'); // Extention du fichier
     
    		if($src_w > $const['WMaxAvatare'] || $src_h > $const['HMaxAvatare']){
    			$coef_w = (($const['WMaxAvatare'] * 100) / $src_w) / 100; // Calcul du coeficient de reduction de la largeur et de la hauteur pour une largeur maximal
    			$coef_h = (($const['HMaxAvatare'] * 100) / $src_h) / 100; // Calcul du coeficient de reduction de la largeur et de la hauteur pour une hauteur maximal
     
    			if ($coef_w < $coef_h) { // Détermine quel coefficiant doit etre utilisé
    				$coef = coef_w;
    			}else{
    				$coef = $coef_h;
    			}
     
    			$dst_w = floor($src_w*$coef); // Largeur de l'image de destination
    			$dst_h = floor($src_h*$coef); // Hauteur de l'image de destination
    		}
     
    		$dst_im = imagecreatetruecolor($dst_w,$dst_h); // Retourne une image noire
     
    		if($ext == '.jpg' || $ext == '.jpeg')
    			$src_im = imagecreatefromjpeg($im_src); // Retourne un identifiant d'image représentant une image obtenue à partir de l'image source JPG
    		elseif ($ext == '.gif')
    			$src_im = imagecreatefromgif($im_src); // Retourne un identifiant d'image représentant une image obtenue à partir de l'image source GIF
    		elseif ($ext == '.png')
    			$src_im = imagecreatefrompng($im_src); // Retourne un identifiant d'image représentant une image obtenue à partir de l'image source PNG
     
    		imagecopyresampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h); // Copie, Redimentionne et rééchantillonne l'image source vers l'image destination
     
    		imagegif($dst_im, $im_dest) // Crée une nouvelle image GIF
     
    		if($ext == '.jpg' || $ext == '.jpeg'){
    			$new_im_dest = str_replace('.jpg','.gif',$im_dest); // Renomme l'extention en .GIF
    			rename($im_dest, $new_im_dest);
    		}elseif ($ext == '.png'){
    			$new_im_dest = str_replace('.png','.gif',$im_dest); // Renomme l'extention en .GIF
    			rename($im_dest, $new_im_dest);
    		}elseif ($ext == '.gif'){
    			$new_im_dest = $im_dest;
    		}
     
     
    		imagedestroy($dst_im); // Libère toute la mémoire associée à l'image image
    		imagedestroy($src_im); // libère toute la mémoire associée à l'image image
     
    		return $new_im_dest; // Retourne le nouvau lien et le nouveau nom du fichier
     
    	}

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    Merci de ton aide

    j'ai cependant préférer ne pas utiliser cette technique, par peur de voir la qualitée de mes images tomber à l'eau, sinon de ton coté la qualité est au rendez-vous ou pas ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut
    Derien !

    La qualité est parfaite aucune degradation ou pixelisation ! surment grace a imagecopyresampled !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    ok bien je vais tester alors merci de ton aide

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    voila j'ai fait mon script, par contre j'ai légérement modifier le tient car je n'arrivais pas à le faire marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    function redim_affiche($im_src,$im_dest)
    {
     
        	$size = getimagesize($im_src); // Recuperation de la taille de l'image source		    	
    	$src_w = $size[0]; // Largeur de l'image source				
    	$src_h = $size[1]; // Hauteur de l'image source
     
    	$pourcent = ((19.6 * 100) / $src_w) / 100; // Calcul du pourcentage de reduction de la largeur et de la hauteur pour 160 px de largeur
     
    	$dst_w = floor($src_w*$pourcent); // Largeur de l'image de destination
    	$dst_h = floor($src_h*$pourcent); // Hauteur de l'image de destination
    	$dst_im = imagecreatetruecolor($dst_w,$dst_h); // Retourne une image noire
     
    	$ext = strrchr($im_src, '.');
     
    	if($ext == '.jpg' || $ext == '.jpeg')
    		$src_im = imagecreatefromjpeg($im_src); // Retourne un identifiant d'image représentant une image obtenue à partir de l'image source
    	elseif ($ext == '.gif')
    		$src_im = imagecreatefromgif($im_src);
    	elseif ($ext == '.png')
    		$src_im =imagecreatefrompng($im_src);
     
    imagecopyresampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h); // Copie, Redimentionne et rééchantillonne l'image source vers l'image destination
     
     
    	imagepng($dst_im, $im_dest); // créer une nouvelle image Png 
     
    	if($ext == '.jpg' || $ext == '.jpeg'){
    			$new_im_dest = str_replace('.jpg','.png',$im_dest); // Renomme l'extention en .GIF
    			rename($im_dest, $new_im_dest);
    		}elseif ($ext == '.gif'){
    			$new_im_dest = str_replace('.gif','.png',$im_dest); // Renomme l'extention en .GIF
    			rename($im_dest, $new_im_dest);
    		}elseif ($ext == '.png'){
    			$new_im_dest = $im_dest;
    		}
     
    	imagedestroy($dst_im); // Libère toute la mémoire associée à l'image image
    	imagedestroy($src_im); // libère toute la mémoire associée à l'image image		
    }
    si j'ai oublié un truc n'hésite pas, en tout cas sa marche plus que bien

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut
    Oui en effet le dernier script que j'ai envoyé comporté des erreurs dans certain cas ! enfin content que mon script tes aidé !

    bon courage pour la suite

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redimensionner une image JPEG
    Par BlackLynX dans le forum C++
    Réponses: 2
    Dernier message: 26/02/2007, 21h23
  2. [ImageMagick] Redimensionner une image
    Par jiojioforever dans le forum Bibliothèques et frameworks
    Réponses: 26
    Dernier message: 05/02/2007, 13h07
  3. Redimensionner une image jpeg
    Par Futixu dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/12/2006, 14h42
  4. [ImageMagick] Redimensionner une image avant de l'enregistrer
    Par julien.63 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 03/05/2006, 21h01
  5. [32 bits] Redimensionner une image JPEG/GIF/PNG...
    Par CR_Gio dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 04/10/2005, 00h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo