begin process at 2012 02 15 18:26:48
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

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

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


 Information sur la source

Note :
Aucune note
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 :13 377

Auteur : GNVA Dfx

Ecrire un message privé
Site perso
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 ...

 Sources de la même categorie

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151
TROUVER LES DOUBLONS DANS UNE LISTE DE FICHIERS par soobook

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GESTIONNAIRE DE NEWS BASIQUE AVEC UPLOAD D'IMAGES par cod57
Source avec Zip Source avec une capture UPLOADEUR DE FICHIERS MULTIPLES V1 par cod57
CLASS GALERIE PHOTO par Xiryl
Source avec une capture CRÉE UNE IMAGE DE PILE DE MINIATURES EN UTILISANT LA BIBLIOT... par TASIOT
Source avec une capture FONCTION MINIATURISATION par Piolo

Commentaires et avis

Commentaire de badoux le 18/12/2006 09:35:59

Bonjour,

c'est du php5 ?

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°

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°

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

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...

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,576 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales