Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REDIMENSIONNEMENT D'UNE IMAGES, GIF, PNG, JPEG, JPG


Information sur la source

Catégorie :Fichier / Disque Classé sous : image, redimenssionnement, picture Niveau : Débutant Date de création : 17/12/2006 Date de mise à jour : 22/05/2007 13:49:48 Vu : 10 841

Note :
Aucune note

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

J'éspère que ce code vous sera utile, je n'ai pas encore eu de problème avec ce code, je l'ai améliorer au fur et à mesure du temps. Elle redimenssione les images en gardant les proportions, bien sur ! Vous avez besoin de la fonction "mime_content_type" sur votre serveur pour afficher correctement l'image.

Pour simplifier le nombre de variable faites une seconde fonction pour juste un affichage ou un enregistrement, exemple :

// Voir une image
function show_image( $src, $size ) { // 2 variables, une pour la source et une pour la taile, la taille s'exprime comme ceci (100x100 ou 200x200 etc.)

return do_image( $src, '', $size, 1, 0 );
}

// Enregistré l'image
function save_image( $src, $size, $dest, $del ) { // 4 variables, la source, la taille maximun, la destination de sauvegarde, si on supprime la source (0=non, 1=oui)

return do_image( $src, $dest, $size, 0, $del );
}

// La fonction "do_image"
do_image( string filename src, string filename dest, string maxSize, int show, int del )

Pour le paramêtre "show" 1 signifie l'affiché, 0 signifie l'inverse logique. Pareils pour le paramêtre "del", 1 signie supprimé le fichier une fois convertis, 0 signe ne pas le supprimé après l'affichage ou l'enregistrement
 

Source

  • function do_image($src, $dest, $size, $show, $del=1) {
  • // Extension du fichier
  • $ext = strtolower( substr( strrchr( $src, '.' ), 1 ) );
  • // Si l'extension est reconnue
  • if( !in_array( $ext, array( 'jpg', 'jpeg', 'gif', 'png' ) ) ) ) {
  • return FALSE;
  • }
  • // Propriété du fichier
  • list( $width, $height, $type, $attr ) = getimagesize($src);
  • // Contrôle du type d'image
  • if( !in_array( $type, array( 1,2,3 ) ) ) {
  • if( $del == 1 ) {
  • unlink( $src );
  • }
  • return FALSE;
  • }
  • // Création d'une images a partir de l'original
  • switch( $type ) {
  • case 1: $tmp = imagecreatefromgif($src); break;
  • case 2: $tmp = imagecreatefromjpeg($src); break;
  • case 3: $tmp = imagecreatefrompng($src); break;
  • default : return FALSE;
  • }
  • // Infos des taillles maximum
  • $size = empty( $size ) || strpos( strtolower( $size ), 'x' ) === FALSE ? 100x100 : $size;
  • list( $max_width, $max_height ) = explode('x', $size);
  • // Calcul des tailles proportionnelles
  • if( $width > $max_width || $height > $max_height ) {
  • if( $width >= $height ) {
  • if( $width > $max_width ) {
  • $width_img = $max_width;
  • $propB = $width/$width_img;
  • $height_img = floor($height/$propB);
  • }
  • if( $height_img > $max_height ) {
  • $height_img = $max_height;
  • $propB = $height/$height_img;
  • $width_img = floor($width/$propB);
  • }
  • }
  • else {
  • if( $height > $max_height ) {
  • $height_img = $max_height;
  • $propB = $height/$height_img;
  • $width_img = floor($width/$propB);
  • }
  • if( $width_img > $max_width ) {
  • $width_img = $max_width;
  • $propB = $width/$width_img;
  • $height_img = floor($height/$propB);
  • }
  • }
  • }
  • else {
  • $width_img = $width;
  • $height_img = $height;
  • }
  • // Création de l'image trueColor
  • $img = imagecreatetruecolor($width_img, $height_img);
  • // Copie d'un contenue vers un autre, rééchantillonnage
  • if( imagecopyresampled($img, $tmp, 0, 0, 0, 0, $width_img, $height_img, $width, $height) !== false ) {
  • // Enregistrement ou affichage
  • if( $show != 1 ) {
  • switch( $type ) {
  • case 1 : imagegif($img, $dest); break;
  • case 2 : imagejpeg($img, $dest, 100); break;
  • case 3 : imagepng($img, $dest); break;
  • default: return FALSE;
  • }
  • }
  • else {
  • @header("Content-type: ". mime_content_type( $src ) );
  • switch( $type ) {
  • case 1 : imagegif($img); exit; break;
  • case 2 : imagejpeg($img, '', 100); exit; break;
  • case 3 : imagepng($img); exit; break;
  • default: return FALSE;
  • }
  • }
  • }
  • // On supprime $del est égal à 1
  • if( $del == 1 )
  • unlink($src);
  • // Suppression des variables
  • unset($img, $tmp, $src);
  • }
	function do_image($src, $dest, $size, $show, $del=1) {
				
		// Extension du fichier
		$ext = strtolower( substr( strrchr( $src, '.' ), 1 ) );
		
		// Si l'extension est reconnue
		if( !in_array( $ext, array( 'jpg', 'jpeg', 'gif', 'png' ) ) ) ) {
			
			return FALSE;
		}
				
		// Propriété du fichier
		list( $width, $height, $type, $attr ) = getimagesize($src);
		
                // Contrôle du type d'image
		if( !in_array( $type, array( 1,2,3 ) ) ) {
			
			if( $del == 1 ) {
			
				unlink( $src );
			}

                  return FALSE;
		} 
		
		// Création d'une images a partir de l'original
		switch( $type ) {

			case 1: $tmp = imagecreatefromgif($src);	break;
			case 2: $tmp = imagecreatefromjpeg($src);	break;
			case 3: $tmp = imagecreatefrompng($src);	break;
						
			default : return FALSE;
		}
		
		// Infos des taillles maximum
		$size = empty( $size ) || strpos( strtolower( $size ), 'x' ) === FALSE ? 100x100 : $size;
		
		list( $max_width, $max_height ) = explode('x', $size);
		
		// Calcul des tailles proportionnelles
		if( $width > $max_width || $height > $max_height ) {
		
			if( $width >= $height ) {
										
				if( $width > $max_width ) {
				
					$width_img	= $max_width;
					$propB 	= $width/$width_img;
					$height_img = floor($height/$propB);
											
				}

				if( $height_img > $max_height ) {
					
					$height_img	= $max_height;
					$propB 	 	= $height/$height_img;
					$width_img 	= floor($width/$propB);
					
				}

			}
			else {
										
				if( $height > $max_height ) {
										
					$height_img	= $max_height;
					$propB 	= $height/$height_img;
					$width_img 	= floor($width/$propB);
											
				}

				if( $width_img > $max_width ) {
					
					$width_img	= $max_width;
					$propB 		= $width/$width_img;
					$height_img = floor($height/$propB);
					
				}
																		
			}
		}
		else {

			$width_img 	= $width;
			$height_img = $height;
		}
		
		// Création de l'image trueColor
		$img = imagecreatetruecolor($width_img, $height_img);
		
		// Copie d'un contenue vers un autre, rééchantillonnage
		if( imagecopyresampled($img, $tmp, 0, 0, 0, 0, $width_img, $height_img, $width, $height) !== false ) {
				
			// Enregistrement ou affichage
			if( $show != 1 ) {
												
				switch( $type ) {
								
					case 1 : imagegif($img, $dest); 		break;
					case 2 : imagejpeg($img, $dest, 100); 	break;
					case 3 : imagepng($img, $dest);		break;
		
					default: return FALSE;
				}
					
			}
			else {
				
				@header("Content-type: ". mime_content_type( $src ) );	
			
				switch( $type ) {
								
					case 1 : imagegif($img); 			exit;	break;
					case 2 : imagejpeg($img, '', 100); 	      exit; break;
					case 3 : imagepng($img); 			exit;	break;
		
					default: return FALSE;
				}
								
			}	
		}
					
			// On supprime $del est égal à 1
			if( $del == 1 ) 			
				unlink($src);
						
			// Suppression des variables
			unset($img, $tmp, $src);
			
	}

Conclusion

Laissez moi des critiques avec des solutions, si il n'y pas de solutions au problème c'est une critique qui n'est pas utile.
 

Historique

17 décembre 2006 19:10:26 :
J'ai modifier l'explication afin quelle soit plus clair.
21 décembre 2006 10:45:02 :
Corrections du code selon des critiques du code
22 mai 2007 13:44:32 :
Corrections diverses
22 mai 2007 13:49:48 :
Corrections des dimensions ...

Commentaires et avis

signaler à un administrateur
Commentaire de badoux le 18/12/2006 09:35:59

Bonjour,

c'est du php5 ?

signaler à un administrateur
Commentaire de kankrelune le 18/12/2006 10:23:15

Uhm... pourquoi un public devant la déclaration de la fonction... c'est inutile vu que c'est une fonction... .. .

Sinon le in_array()/explode est un peu inutile autant faire...

if(!in_array($type, array(1,2,3)))

voir même...

if($type > 3)
{
    if(!empty($del)
        unlink($src);

    return false;
}

D'ailleur tu as une petit erreur dans cette même condition qui ne renvoie false que si $del == 1...

Tu fais deux fois la vérification de l'image... une fois par rapport à l'extension et une seconde fois pas rapport au type retourné par getimagesize()... c'est inutile le second test suffit... et plutot que de faire une condition à part tu pourrais faire... vu que tu utilise un switch...

switch($type)
{  
     case 1: $tmp = imagecreatefromgif($src);    break;
     case 2: $tmp = imagecreatefromjpeg($src);   break;
     case 3: $tmp = imagecreatefrompng($src);    break;
                        
    default:
        if(!empty($del)
            unlink($src);

        return false;
}

Sinon je trouve que l'utilisation de mime_content_type() n'est pas justifiée et limite la portabilité du script pour pas grand chose... autant faire...

# @header("Content-type: ". mime_content_type( $src ) );    
            
switch($type)
{
    case 1:
        header('Content-type: image/gif');
        imagegif($img);            
        exit();    
    break;

    case 2:
        header('Content-type: image/jpeg');
        imagejpeg($img, '', 100);            
        exit();    
    break;

    case 3:
        header('Content-type: image/png');
        imagepng($img);            
        exit();    
    break;

}

par contre il pourrait être bien de rajouter...

if(!empty($show) && headers_sent())
    return false;

Afin de vérifier si les header sont déja envoyé et si de ce fait il sera possible d'afficher l'image ou non... .. .

Utilise empty() plutot que $maVar == 1 ou $maVar != 1

Pour finir ton unset($img, $tmp, $src); à la fin est totalement inutile vu que les variables sont locales php les supprime automatiquement à la fin de l'éxécution de la fonction... .. .

Voila dans les grandes lignes... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de kankrelune le 18/12/2006 10:26:34

Zut erreurs de frappe dans mon commentaire précédant...

if(!empty($del)) et non if(!empty($del) et il faut virer le...

# @header("Content-type: ". mime_content_type( $src ) );

@ tchaOo°

signaler à un administrateur
Commentaire de GNVA Dfx le 20/12/2006 19:27:17

Public pk, parce que c'est bien clair. On sait de quoi on parle, on pourrait ne rien mettre oui, automatiquement cela est considéré en public je sais. C'est histoire de bien faire les choses.

// Citation
D'ailleur tu as une petit erreur dans cette même condition qui ne renvoie false que si $del == 1..

Merci pour l'interrogation du type qui ne renvoie FALSE que si $del est égal à 1, je n'avais pas remarqué.

// Citation
Tu fais deux fois la vérification de l'image... une fois par rapport à l'extension et une seconde fois pas rapport au type retourné par getimagesize()... c'est inutile le second test suffit... et plutot que de faire une condition à part tu pourrais faire... vu que tu utilise un switch...

Oui je fais 2 fois le contrôle du type de l'image, une fois par l'extension et une fois par le type même de l'image, je trouve nécessaire en cas de problème de savoir où chercher, c'est totalement volontaire !

// Citation
Sinon je trouve que l'utilisation de mime_content_type() n'est pas justifiée et limite la portabilité du script pour pas grand chose... autant faire...

Pour les headers c'est un petit détail je trouve mais je prend note.


// Citation
par contre il pourrait être bien de rajouter...
if(!empty($show) && headers_sent())
    return false;

Par contre je ne comprends pas pourquoi contrôler que les headers sont envoyés vu que c'est un enregistrement ? Cela peut-être fait avant ou après les headers envoyés

// Citation
Utilise empty() plutot que $maVar == 1 ou $maVar != 1

Tu me dis utilise plustot cette fonction, j'ai eu pas mal d'erreur du à cette fonction que je n'apprècie pas beaucoup et j'ai remarqué que d'autres sources contrôle toujours avec une comparaison ($maVar == 1 | $maVar !=1 ) et la fonction empty() mais jamais seul. Enfin cela reste un avis personnel peut-etre.


// Citation
Pour finir ton unset($img, $tmp, $src); à la fin est totalement inutile vu que les variables sont locales php les supprime automatiquement à la fin de l'éxécution de la fonction... .. .

Ca c'est du folklore ! C'est vrai mais j'aime bien supprimer ce que je fait une fois terminé, c'est une assurance qui ne sert à rien sûrement.

Merci pour ta critique très objectives

signaler à un administrateur
Commentaire de GNVA Dfx le 20/12/2006 19:29:49

Lol do_image est une function ! Juste ! Elle n'est pas dans une class, donc pas de public avant. Je l'avais dans une class pour ma part, erreur de correction...

signaler à un administrateur
Commentaire de fruz le 13/09/2007 18:21:31

Salut,

j'ai télèchargé le script pour voir, mais il y a une erreur à la ligne :

$size = empty( $size ) || strpos( strtolower( $size ), 'x' ) === FALSE ? 100x100 : $size;

@+

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

:::::: URGENT !!! ENVOI D'IMAGE PAR FTP !!!! ERREUR :::::: [ par kkz_mil3k ] j'essaie d'nevoyer un fichier image gif ou jpg sur un ftp via ce formulaire php :------------------------------------------- //**connecte au ftp sc Comment insérer un champs image ds ma table ?? [ par inceV ] Salut à tous et bonne année 2002 !!!Bon, je n'arrive pas à créer un champs 'image' ds ma table et je ne comprends pas tp commen ça marche, pourriez-vo Faire unr image sur le serveur en PHP [ par fabiin ] Salut !En ASP, il y a un composant ki permet de créer une image sur le serveur,...on peu avec 2-3 ligne de codes, faire un dégradé, mettre du texte, e Insérer une image dans une autre [ par cduf ] Je sais créer une image (compteur) avec des commandes php GD, mais comment l'insérer dans une autre (bannière). Merci de m'aider.Email : cdufetelle@wa envoyer une image dans le $message de mail() [ par linov ] Bonjour,Comment faire pour envoyer une image dans le $message envoyé par la fonction mail() ?Syntaxe ? Paramètres ? Est-ce possible ?Merci de votre ai include image [ par erich10 ] comment faire un include d'une image ?et comment faire en plus un lien sur cette image?merci générer des miniatures avec gd 1.6 [ par vegetaline ] muhaha alors là c'est rigolo, un super défi pour les programmeurs fous!ok j'ai le code pour générer des miniatures grâce au php, mais ça marche qu'ave MySQL et images [ par Marneus Calgar ] SalutJ'aimerais savoir s'il est possible de stocker des images dans une table MySQL et d'y accéder depuis une page PHP. En fait, je voudrais faire un MySQL et images [ par Marneus Calgar ] SalutJ'aimerais savoir s'il est possible de stocker des images dans une table MySQL et d'y accéder depuis une page PHP. En fait, je voudrais faire un Ne pas afficher la barre de Menu Image [ par microdav ] Bonjour à vous Internaute,je vous soumets une petite question...Je recherche Code permettant de ne pas faire afficher la barre de menu "Image" sur une


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.