Ressource PHP : Cropper une image

Voici une petite fonction PHP utile qui vous permet de cropper une image à partir d'un fichier jpg/png ou gif à l'aide de la librairie GD de PHP.

/**
 * Permet de cropper une image au format png/jpg et gif au format souhaité
 *
 * Si la largeur ou la hauteur est mise à 0 la dimension sera automatiquement calculé
 * de manière à garder le ratio de l'image
 *
 * @param string $img Fichier image d'origine (doit avoir une extension)
 * @param string $dest Fichier de destination (avec l'extension .jpg)
 * @param integer $largeur Largeur de l'image en sortie
 * @param integer $hauteur Hauteur de l'image en sortie
 */
function crop($img,$dest,$largeur=0,$hauteur=0){
        $dimension=getimagesize($img);
        $ratio = $dimension[0] / $dimension[1];
        // Création des miniatures
        if($largeur==0 && $hauteur==0){ $largeur = $dimension[0]; $hauteur = $dimension[1]; }
          else if($hauteur==0){ $hauteur = round($largeur / $ratio); }
        else if($largeur==0){ $largeur = round($hauteur * $ratio); }
 
        if($dimension[0]>($largeur/$hauteur)*$dimension[1] ){ $dimY=$hauteur; $dimX=round($hauteur*$dimension[0]/$dimension[1]); $decalX=($dimX-$largeur)/2; $decalY=0;}
        if($dimension[0]<($largeur/$hauteur)*$dimension[1]){ $dimX=$largeur; $dimY=round($largeur*$dimension[1]/$dimension[0]); $decalY=($dimY-$hauteur)/2; $decalX=0;}
        if($dimension[0]==($largeur/$hauteur)*$dimension[1]){ $dimX=$largeur; $dimY=$hauteur; $decalX=0; $decalY=0;}
        $miniature =imagecreatetruecolor ($largeur,$hauteur);
		$ext = end(explode('.',$img)); 
        if(in_array($ext,array('jpeg','jpg','JPG','JPEG'))){$image = imagecreatefromjpeg($img); }
        elseif(in_array($ext,array('png','PNG'))){$image = imagecreatefrompng($img); }
        elseif(in_array($ext,array('gif','GIF'))){$image = imagecreatefromgif($img); }
        else{ return false; }
        imagecopyresampled($miniature,$image,-$decalX,-$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
        imagejpeg($miniature,$dest,90);
         
        return true;
}

Après avoir appris sur Internet quoi de plus normal que de partager à son tour ? Passionné par le web depuis un peu plus de 5 ans maintenant j'aime partager mes compétences et mes découvertes avec les personnes qui ont cette même passion pour le web : Vous.

Vous aimerez aussi

Redimensionner une image

Travailler sur une image n'est pas une chose facile avec PHP, il faut...

Quelques tableaux utiles

Quel développeur ne s'est pas déja retrouvé à devoir lister l'ensemble...

15 commentaires
Ajouter un commentaire

Splaze Il y a 3 mois Répondre

Ah le bon plan! Merci c'est cool!

peuticoeur Il y a 4 mois Répondre

super super super cite ,je suis un debutant ce site offre des bonne base pour aprendre le web merci a grafikart

uns2010 Il y a 4 mois Répondre

merci merci merci merci grafikart

adrien_garnier Il y a 6 mois Répondre

Bonjour et merci pour tous les tutos et ressources.
Une question cependant: lorsque je crop un png, le fichier jpg généré est toujours sur fond noir. Peut on changer le script pour sauver le jpg sur fond blanc ?

stef3074 Il y a 6 mois Répondre

Merci, merci, merci, pour le temps que tu m'as épargné !!!!

TiBaker-974 Il y a 7 mois Répondre

//FERMETURE DES RESSOURCES IMAGES OUVERTES
imagedestroy($miniature);
imagedestroy($image);

Une petite libération de la mémoire ne fera pas de mal. MDR

Merci quand même pour ton partage du savoir.
PS : PAS TOUTE LES GENS SONT COMME TOI MON AMI, BONNE CONTINUATION !

gounane Il y a 7 mois Répondre

Merci, présent comme dab

teol Il y a 7 mois Répondre

T'as pas plutôt une fonction pour enregistrer l'image directement sur le serveur ?
Merci

Grafikart Il y a 7 mois - Répondre

C'est exactement ce que fait ce script

nanodemars Il y a 7 mois Répondre

Merci !

zebulonbof Il y a 7 mois Répondre

il faut préciser que cette fonction n'est pas très apprécié par le serveur. J'entend pas là que si vous affichez 20 images cropé par cette fonction vous chargerez inutilement votre serveur, il faut donc prévoir une fonction de mise en cache de l'image généré, pour ne pas régénérer l'image à chaque chargement de page Car dans le cas ou vous avez beaucoup de visiteurs, le serveur va full rapidement ... (GD est gourmand le saloupio :p)

mody5 Il y a 7 mois

slt vous pouvez m'indiquez un tuto ou je peux trouver une méthode de mise en cache de l'image généré ?

Torgi Il y a 7 mois

IL suffit d'enregistrer l'image générée. A l'affichage suivant on vérifie si il y a une image générée, si elle existe on l'affiche sinon on l'a génère.

PaulB319 Il y a 7 mois - Répondre

Il suffit d'englober le contenu de cette fonction dans un if(!file_exists($dest))

sylvain Il y a 7 mois Répondre

Merci, je me demande si c'est plus compliqué d'ajouté un effet arrondi sur l'image cropé ?

Ciloe Il y a 7 mois Répondre

Cropper une image c'est à dire la réduire? Je poses des questios con des fois :D

Grafikart Il y a 7 mois

Oui ce n'est pas un crop dans le sens premier du terme.
Si tu demande une image 100x100 ça redimensionnera l'image pour la rentrer dans le carré et ça coupera les bords si le ratio ne peut être respecté.

Ciloe Il y a 7 mois - Répondre

D'accord je vois. Merci ^^

fdusautoir Il y a 7 mois Répondre

Simple, clair et FONCTIONNEL. Merci.

sei05 Il y a 7 mois Répondre

Merci pour cette ressource

ariel Il y a 7 mois Répondre

Merci !

Laisser un commentaire

Si vous avez une question il est conseillé d'utiliser le forum si vous voulez une réponse sûre.