begin process at 2010 03 21 02:07:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > MINIATURISATION D'IMAGE V2

MINIATURISATION D'IMAGE V2


 Information sur la source

Note :
9,17 / 10 - par 6 personnes
9,17 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :miniaturisation, image, gd, redimensionnement, fonction Niveau :Initié Date de création :17/06/2006 Vu / téléchargé :7 408 / 863

Auteur : Palleas_44

Ecrire un message privé
Site perso
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

Fonction de redimensionnement d'image (+ sauvegarde si besoin est), un peu plus performante que la derniere :) Je compte encore l'optimiser par la suite mais la c'est deja pas mal je pense, elle retravaille l'image et elle le fait bien donc pas de soucis =)

Source

  • <?php
  • function mini ($xmax,$ymax,$dossier,$img,$name,$fond_couleur) {
  • /*
  • $xmax => largeur maximale de l'image
  • $ymax => hauteur maximale de l'image
  • => soit une taille en px soit 'none' pour dire qu'on veut garder la même
  • $dossier => dossier dans lequel doit être créé la miniature : format dossier/ (ne pas oublier le / )
  • $img => l'image à miniaturiser
  • $name => le nom de l'image
  • $fond_couleur => couleur de fond de l'image au format hexadecimal RRR-VVV-BBB
  • */
  • // Types d'images utilisés pour le 'switch' un peu plus loin
  • define('FORMAT_GIF',1);
  • define('FORMAT_JPEG',2);
  • define('FORMAT_PNG',3);
  • // dimensions critiques
  • define('XMIN',0);
  • define('YMAX',1000);
  • define('XMIN',0);
  • define('XMAX',1000);
  • // dimensions par défaut
  • define('DEFAUTX',150);
  • define('DEFAUTY',150);
  • // on essaie d'ouvrir le fichier uniquement en lecture (pour être sur qu'il existe) :
  • if(@$file=fopen($img,'r')) {
  • // si le fichier a bien été ouvert, on verifie que c'est bien une image
  • // getimagesize renvoie plusieurs infos de l'image (dimensions, type etc...) et FALSE
  • // si le fichier n'est pas une image :
  • if(list($largeur,$hauteur,$extention) = @getimagesize(htmlentities($img))) {
  • // si c'est bien une image, on teste les valeurs voulues pour la miniature
  • // largeur
  • if((isset($xmax) && !empty($xmax) && $xmax>XMIN && $xmax<XMAX)) {
  • $xm=$xmax;
  • } elseif($xmax=='none') {
  • // si la largeur n'est pas definie on garde la même
  • $xm=$largeur;
  • } else {
  • $xm=DEFAUTX; // largeur par defaut (au cas ou)
  • }
  • // hauteur
  • if((isset($ymax) && !empty($ymax) && $ymax>YMIN && $ymax<YMAX)) {
  • $ym=$ymax;
  • } elseif($ymax=='none') {
  • // si la hauteur n'est pas definie on garde la même
  • $ym=$hauteur;
  • } else {
  • $ym=DEFAUTY; // largeur par defaut (au cas ou)
  • }
  • // creation de la miniature :
  • // test de l'extention :
  • if(in_array($extention,array(1,2,3))) {
  • // si l'extention est bonne on continue
  • switch($extention) {
  • case FORMAT_GIF: // GIF
  • $im=imagecreatefromgif($img) or die('probleme de librairie');
  • break;
  • case FORMAT_JPEG: //JPEG
  • $im=imagecreatefromjpeg($img) or die('probleme de librairie');
  • break;
  • case FORMAT_PNG: // PNG
  • $im=imagecreatefrompng($img) or die('probleme de librairie');
  • break;
  • }
  • // test des dimensions :
  • // si l'image est trop large ou trop haute
  • if($largeur>$xm || $hauteur>$ym) {
  • // coeficient de proportionnalité (pour garder les proportions dans la reduction de l'image)
  • // la reduction ne se fait que pour des dimensions finales entieres donc on arrondis le resultat
  • if ($largeur && ($largeur > $hauteur)) {
  • // image plus large que haute
  • $nhauteur = ceil(($hauteur * $xm)/$largeur);
  • $nlargeur=$xm;
  • } else {
  • // image plus haute que large
  • $nlargeur = ceil(($largeur *$ym)/$hauteur);
  • $nhauteur=$ym;
  • }
  • } elseif($largeur<$xm || $hauteur<$ym) {
  • if($largeur<=$xm) {
  • $nlargeur=$largeur;
  • $xm=$largeur;
  • }
  • if($hauteur<=$ym) {
  • $nhauteur=$hauteur;
  • $ym=$hauteur;
  • }
  • } else {
  • $nlargeur=$largeur;
  • $nhauteur=$hauteur;
  • }
  • // calcul de la position de l'image sur la miniature (centrée si l'image finale est plus grande)
  • $py=($ym-$nhauteur)/2;
  • $px=($xm-$nlargeur)/2;
  • // miniaturisation
  • // image sur fond de couleur definie par l'utilisateur :
  • if(isset($fond_couleur) && !empty($fond_couleur)) {
  • $src=imagecreatetruecolor($xm,$ym) or die('probleme de librairie');
  • list($fond_rouge,$fond_vert,$fond_bleu) = explode('-',$fond_couleur);
  • $fond=imagecolorallocate($src,$fond_rouge,$fond_vert,$fond_bleu) or die('probleme de librairie');
  • // on dessine un rectangle de la couleur choisit par l'utilisateur (couleur de fond)
  • imagefilledrectangle($src,0,0,$xm,$ym,$fond) or die('probleme de librairie');
  • // on créé la miniature
  • imagecopyresampled($src,$im,$px,$py,0,0,$nlargeur,$nhauteur,$largeur,$hauteur) or die('probleme de librairie');
  • } else {
  • // Aucune couleur de fond definie!
  • return false;
  • }
  • } else {
  • //L'image doit être au format GIF, JPEG ou PNG !
  • return false;
  • }
  • } else {
  • // Le fichier n'est pas une image !
  • return false;
  • }
  • } else {
  • return false;
  • }
  • // dans le cas ou vous voudriez sauvegarder puis afficher, ne pas inverser cet ordre !
  • // sauvegarde de l'image :
  • imagepng($src,$dosier.$name.'.png');
  • // affichage de l'image
  • header('content-type: image/png');
  • return @imagepng($src);
  • }
  • ?>
<?php
function mini ($xmax,$ymax,$dossier,$img,$name,$fond_couleur) {
	/*
	$xmax => largeur maximale de l'image
	$ymax => hauteur maximale de l'image
	=> soit une taille en px soit 'none' pour dire qu'on veut garder la même
	$dossier => dossier dans lequel doit  être créé la miniature : format dossier/ (ne pas oublier le / )
	$img => l'image à miniaturiser
	$name => le nom de l'image
	$fond_couleur => couleur de fond de l'image au format hexadecimal RRR-VVV-BBB
	*/
	
	// Types d'images utilisés pour le 'switch' un peu plus loin
	define('FORMAT_GIF',1);
	define('FORMAT_JPEG',2);
	define('FORMAT_PNG',3);
	
	// dimensions critiques
	define('XMIN',0);
	define('YMAX',1000);
	define('XMIN',0);
	define('XMAX',1000);
	
	// dimensions par défaut
	define('DEFAUTX',150);
	define('DEFAUTY',150);
	
	// on essaie d'ouvrir le fichier uniquement en lecture (pour être sur qu'il existe) :
	if(@$file=fopen($img,'r')) {
		// si le fichier a bien été ouvert, on verifie que c'est bien une image
		// getimagesize renvoie plusieurs infos de l'image (dimensions, type etc...) et FALSE
		// si le fichier n'est pas une image :
		if(list($largeur,$hauteur,$extention) = @getimagesize(htmlentities($img))) {
			// si c'est bien une image, on teste les valeurs voulues pour la miniature
			// largeur
			if((isset($xmax) && !empty($xmax) && $xmax>XMIN && $xmax<XMAX)) {
				$xm=$xmax;
			} elseif($xmax=='none') {
			// si la largeur n'est pas definie on garde la même
				$xm=$largeur;
			} else {
				$xm=DEFAUTX; // largeur par defaut (au cas ou)
			}
			// hauteur
			if((isset($ymax) && !empty($ymax) && $ymax>YMIN && $ymax<YMAX)) {
				$ym=$ymax;
			} elseif($ymax=='none') {
			// si la hauteur n'est pas definie on garde la même
				$ym=$hauteur;
			} else {
				$ym=DEFAUTY; // largeur par defaut (au cas ou)
			}
			// creation de la miniature :
			// test de l'extention :
			if(in_array($extention,array(1,2,3))) {
				// si l'extention est bonne on continue
				switch($extention) {
					case FORMAT_GIF: // GIF
						$im=imagecreatefromgif($img) or die('probleme de librairie');
					break;
					case FORMAT_JPEG: //JPEG
						$im=imagecreatefromjpeg($img) or die('probleme de librairie');
					break;
					case FORMAT_PNG: // PNG
						$im=imagecreatefrompng($img) or die('probleme de librairie');
					break;
				}
				// test des dimensions :
				// si l'image est trop large ou trop haute
				if($largeur>$xm || $hauteur>$ym) {
					// coeficient de proportionnalité (pour garder les proportions dans la reduction de l'image)
					// la reduction ne se fait que pour des dimensions finales entieres donc on arrondis le resultat
					if ($largeur && ($largeur > $hauteur)) {
						// image plus large que haute
						$nhauteur = ceil(($hauteur * $xm)/$largeur);
						$nlargeur=$xm;
					} else {
						// image plus haute que large
						$nlargeur = ceil(($largeur *$ym)/$hauteur);
						$nhauteur=$ym;
					}
				} elseif($largeur<$xm || $hauteur<$ym) {
					if($largeur<=$xm) {
						$nlargeur=$largeur;
						$xm=$largeur;
					}
					if($hauteur<=$ym) {
						$nhauteur=$hauteur;
						$ym=$hauteur;
					}
				} else {
					$nlargeur=$largeur;
					$nhauteur=$hauteur;
				}
				// calcul de la position de l'image sur la miniature (centrée si l'image finale est plus grande) 
				$py=($ym-$nhauteur)/2;
				$px=($xm-$nlargeur)/2;
				
				// miniaturisation
				
				// image sur fond de couleur definie par l'utilisateur :
				if(isset($fond_couleur) && !empty($fond_couleur)) {
					$src=imagecreatetruecolor($xm,$ym) or die('probleme de librairie');
					
					list($fond_rouge,$fond_vert,$fond_bleu) = explode('-',$fond_couleur);
					$fond=imagecolorallocate($src,$fond_rouge,$fond_vert,$fond_bleu) or die('probleme de librairie');
					
					// on dessine un rectangle de la couleur choisit par l'utilisateur (couleur de fond)
					imagefilledrectangle($src,0,0,$xm,$ym,$fond) or die('probleme de librairie');
					
					// on créé la miniature
					imagecopyresampled($src,$im,$px,$py,0,0,$nlargeur,$nhauteur,$largeur,$hauteur) or die('probleme de librairie');
				} else {
					// Aucune couleur de fond definie!
					return false;
				}
			} else {
				//L'image doit être au format GIF, JPEG ou PNG !
				return false;
			}
		} else {
			// Le fichier n'est pas une image !
			return false;
		}
	} else {
		return false;
	}
	// dans le cas ou vous voudriez sauvegarder puis afficher, ne pas inverser cet ordre !
	// sauvegarde de l'image :
	imagepng($src,$dosier.$name.'.png');
	
	// affichage de l'image
	header('content-type: image/png');
	return @imagepng($src);

}
?>

 Conclusion

Rien à ajouter pour l'instant, comme je l'ai dit je vais la modifier par la suite pour par exemple ne pas ecrase une image deja existante au cas ou, on verra par la suite :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

SUITE LOGIQUE
Source avec Zip CLASSE DE MINIATURISATION D'IMAGE
Source avec Zip [FONCTION RÉCURSIVE] DETERMINER LE PGDC DE DEUX NOMBRES
CRÉATION D'UNE IMAGE MINIATURE

 Sources de la même categorie

Source avec une capture DES HISTOGRAMES , CAMEMBERT 3D ET ÉCLATÉS CRÉÉ AU VOL EN PH... par zozo14
AJOUTER UN ARRIÈRE PLAN SUR UNE IMAGE par digitaldax
REDIMENSIONNER UNE IMAGE EN PHP par digitaldax
Source avec Zip RECHERCHE DE MOTIF DANS UNE IMAGE par ParseError
BARRES PARAMÉTRABLES EN DÉGRADÉ DE COULEUR ET AVEC TEXTE DA... par hornetbzz

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CLASSE LECTUREENLIGNE - POUR LES SITES DE SCANTRAD OU ... par tiger222
Source avec une capture ECRIRE UN TEXTE EN CERCLE SUR UNE IMAGE par coucou747
REDIMENTION D'IMAGE, LIBRAIRIE GD par 17l7
Source avec Zip CLASSE DE TRAITEMENT D'IMAGE par grunkz
Source avec Zip CLASSE PHP5 D'UPLOAD / REDIMENSIONNEMENT D'IMAGE GD par littlewings

Commentaires et avis

Commentaire de BenXbox le 18/06/2006 10:46:54

Salut Palleas_44,
Je voudrais savoir pourquoi tu ne fais pas ta source pour plus t'extension d'images : exemple le bmp.
Et j'aurais voulue savoir comment faire pour faire marcher ton script avec un dossier d'images sans extensions.
Merci d'avance.

Commentaire de Palleas_44 le 18/06/2006 11:07:45

Pour le bmp c'est plus compliqué puisqu'il n'y a pas vraiment de fonction comme celles utilisées ici genre imagecreatefrombmp() =)
Mais c'est pas bete ca ^o) j'vais m'y atteler :p

Sinon je vois pas trop ce que tu veux dire pour un dossier d'images sans extentions ^o)

Commentaire de BenXbox le 18/06/2006 11:16:14

Bas enfaite mon site de rencontre enregistre les images dans le dossier « photos » sans leur extensions  lors de l’upload exemple :
Avant = BenXbox.JPG
Après = BenXbox
Maintenant que j’ai plus de 5000 photos dans ce type d’extensions « jpeg, jpg, png, gif, bmp » je ne sais pas comment faire pour les réduire avec la lib GD.
Je pense que ton script est pas mal pour faire ce que je veux, mais il faudrait ajouter le bmp et pouvoir retrouver les extensions des images du dossier « photos ».
Merci d’avance.

Commentaire de TheSin le 18/06/2006 13:32:53

Bin moi sur le BMP je me demande bien comment on peut faire, ne serait-ce que pour le charger avec GD ...
Faudrait ouvrir le fichier en binaire puis l'analyser et ajouter chaque pixel correctement je pense, mais bon, je pense que ca peut être assez lourd en PHP :(
Sinon, sympa ton nouveau code Palleas_44 ;-)

Commentaire de webdeb le 19/06/2006 12:51:23

Yep l'ami !

Tu vas bien ? Ca y'est tu t'es décidé à poster ta source ^^ Sincèrement elle est classe mais ce qu'il serait bien d'essayer c'est de l'implémenter dans une fonction ou bien dans une classe objet.

++

Hugo.

PS : Je te mets 9/20 :)

Commentaire de gborras le 19/06/2006 12:59:59

je ne sais pas pour la lecture du bmp non plus, par contre pour identifier le type des fichiers le plus simple reste de lire les premiers octets pour avoir la signature du type de fichier
BPM  : commencent par BM en général
JPEG : JFIF a partir du 6eme octet ......JFIF....
GIF  : commencent par GIF
...

Commentaire de malalam le 19/06/2006 13:03:09 administrateur CS

PS: heureusement que les nots sont sur 10, sinon il t'aurait descendu, ton pote... ;-)
A part ça, c'est pas mal. Sauf peut-être la sauvegarde...y a que du png.

Commentaire de NeoZer0 le 20/06/2006 10:15:22

Pour le BMP faut savoir manipuler les fichiers binaire et créer ca propre fonction:
voila un peut d'info sur le format: http://fr.wikipedia.org/wiki/BMP_%28format%29
et les fonctions pack et unpack de php peuvent être très utilent
en manipulant le binaire (et en connaissant la structure du format) on peut manipuler plein de choses

Commentaire de masternico le 22/06/2006 09:36:41

En fouillant un peut sur le site de fr3.php.net, j'y ai trouvé la fontion imagewbmp dont voici la fiche technique:

***********************************************
***********************************************

bool imagewbmp ( resource image [, string filename [, int foreground]] )


imagewbmp() crée l'image WBMP dans le fichier filename, à partir de l'image image. Le paramètre image a été créé avec la fonction imagecreatetruecolor().

filename est optionnel et, s'il est omis, l'image sera envoyée directement au client. En plaçant l'en-tête image/vnd.wap.wbmp, dans le champ "content-type", vous pourrez afficher une image WBMP.

Note : Le support WBMP n'est disponible que si PHP a été compilé avec GD-1.8 ou plus récent.


En passant le paramètre optionnel foreground, vous pouvez choisir la couleur de fond. Utilisez l'identifiant retourné par imagecolorallocate() comme valeur de ce paramètre. La couleur de fond par défaut est noire.

Voir aussi image2wbmp(), imagepng(), imagegif(), imagejpeg() et imagetypes().
*************************************************************
*************************************************************

Même si je n'ai pas bien saisi la différence entre BMP etWBMP, je pense qu'il doit ainsi être possible d'aranger ton code pour qu'il puisse sauvegarder l'image réduite dans le même format que l'original et aussi travailler sur des BMP

Commentaire de masternico le 22/06/2006 09:59:58

Je viens juste de remarquer que l'image $im crée à partir de l'image source n'est pas détruite avant de sortir de la fonction. Elle reste en mémoire et peut donc finir par la saturer après avoir manipulé quelques images...
=>> imagedestroy($im);

Commentaire de TheSin le 22/06/2006 13:19:39

Masternico => WBMP n'est malheureseument pas BMP.

Quote of "clambert at whitecrown dot net" :
"WBMP images are Wireless Bitmaps, not Windows Bitmaps. WBMP is used for bandwidth constrained, black and white, limited devices such as PDAs and Cell Phones."

Commentaire venant de http://fr2.php.net/manual/fr/function.imagecreatefromwbmp.php

Il faut donc bien créer toutes les fonctions ...
Par ailleurs, ca serait bien si elles étaient natives à GD, sinon ça risque vraiment d'être lourd :S ...

Commentaire de Palleas_44 le 22/06/2006 19:53:09

Ah ouais j'avais pas pensé à gerer la sauvegarde de l'image sous plusieurs formats, c'est pas bête ^o)
Je prend note :)
Je vais aussi voir pour le bmp et pour Webdeb, c'est deja une fonction non? ;) Pour une classe objet je connais pas encore la poo :$ ca va venir, je suis en vacances j'aurais que ca à faire :p

A bientot pour des modifs ;)

Commentaire de webdeb le 23/06/2006 14:17:51

Oups quel noob je n'avais pas vu que c'était une fonction en haut. Au temps pour moi. J'ai été dérouté par les commentaires ^^

Commentaire de Palleas_44 le 23/06/2006 14:20:28

C'est le soleil, la canicule tout ca... mon pauvre webdeb :p
Enfin merci pour la note =)

Commentaire de masternico le 25/06/2006 21:06:02

Merci TheSin pour la précision à propos des WBMP. Je suis d'accord qu'une telle fonction de gestion des BMP manque cruellement à la GD... peut-être en cour de développement.
Mais en même temps, vue la taille d'un BMP, rare sont les personnes qui utilise ce genre de fichier en upload ou download. En serait-ce la raison?
Au fait, bon code, je mets 9/10 aussi... 10 se sera pour quand il y aura les autres formats de fichiers   ;)

Commentaire de rduvrac le 11/08/2006 08:35:48

très bien ce script :-D

juste une question technique :

Au lieu de mettre un vert fluo , il est pas possible de faire de la transparence à la place ?

Commentaire de lotfikecir le 05/11/2006 18:43:46

c'est vraiment du bon boulot je te tire chapeau ça m'a plus, juste un truc ya une erreur dans le ocde source au niveau des
     define('XMIN',0);
     define('YMAX',1000);
     define('XMIN',0); à changer par define('YMIN',0); parce que il y a une double déclaration mai sinon ça fonctionne très bien. de toute les façons je suis sur un projet ,j'ai untiliser at source qui m'est d'une grande utilité, dès que je l'aurai trminer je le posterai ici. A+
    

Commentaire de edotheking le 10/02/2007 00:16:08

J'ajouterai juste un truc sur cette source très bien faite, je n'ai pas compris pourquoi il y a un carré blanc de la hauteur maximale spécifiée...enfin c'était peut-etre voulu.
De toute façon c'est pas bien dur de la modifier, il y a juste a changer les derniers parametres quand l'image est crée.

En tout cas merci pour cette source bien utile (pourquoi s'embeter a coder des trucs comme ca quand d'autres l'on fait, et mieux que vous...).

Commentaire de moimc le 04/05/2007 10:53:34

Niquel, depuis le temps que j'en cherchais un correct.

Par contre, une petite faute à corriger, à la fin de la fonction c'est 'dossier' et pas 'dosier' !

merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

affichage d'une image en fonction du nom de la page [ par fstyle ] Bonjour/soir !J'ai un petit soucis ... j'ai dû modifié un site en php ... et j'ai créer des modèles avec dreamweaver le soucis c'est que quand on est 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 texte sur image... librairie GD ? [ par ozitoun ] Bonjour bonjour,voili voilou, je cherche à mettre une texte sur une image (jpeg).j'ai essayé les imagestring, imagechar... mais à chaque fois les exem Couper le bas d'une image (GD PHP) [ par dezeque ] bonjour,j'aimerai savoir comment faire pour couper le bas d'une image ?elle fais 600X800 et j'aimerai enlver les 50 dernirers pixels du bas pour quell fonction ftp_chdir [ par Batric ] Bonjour à tous,Je commence à développer en php depuis quelques semaines et je bloque sur un problème depuis hier : j?ai développé une fonction d?uploa taille d'une image [ par glipper ] Bonjour, je cherche un moyen simple de connaitre la taille d'une image.Je connais la fonction 'getimagesize', qui marche tres bien... mais qui est bcp image et fonction [ par cls238 ] bonsoir a tousune fois de plus je vous appelle a l'aidecomment executer une fonction l'or d'un clic sur une image ???plusieur scripts dejas essayer sa Problème d'affichage avec la libraire GD [ par CMOIPOPO ] Salut &#224; tous,Je souhaite dessiner tout b&#234;tement un rectangle en php (je travaille en local)&nbsp;&#224; l'aide de la libraire GD. Pour cela, taille d'une image en fonction de la taille de la résolution de l'écran [ par vincentstryckmans ] Bonjour, Avec la fonction imagepng($image,$filename), je g&#233;n&#232;re une image dont je souhaite voir la taille s'adapter en fonction de la r&#23 Protection d' image original [ par overbrave ] Salut Dieu du code,Je sais qu'il existe toute sorte de script ou fonction permettant de bloquer le clique droit, etc ...Ces fonction sont senc&#233; n


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

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,357 sec (4)

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