Miniaturisation d'image v2

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 / Exemple :


<?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 :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.