Créer une miniature en php

But : créer une miniature à partir d’une image, avec une largeur et une hauteur maximum, sans agrandir l’image (pour ne pas avoir une miniature de mauvaise qualité) si elle est plus petite que la taille de la miniature souhaitée.

(Pour la méthode où on diminue l’image jusqu’à ce qu’elle rentre complètement dans nos dimensions et où on remplit les espaces vides avec une couleur de fonc, cf créer une miniature sans rogner)

On a 5 cas possibles :
Cas n°1 : L’image est plus petite en hauteur et en largeur : on la recopie telle quelle, sans la redimentionner.
Cas n°2 : L’image dépasse en hauteur mais est trop petite en largeur : on coupe ce qui dépasse en hauteur
Cas n°3 : L’image dépasse en largeur mais est trop petite en hauteur : on coupe ce qui dépasse en largeur
Cas n°4 : L’image dépasse en largeur et en hauteur et est proportionnement trop grande en largeur : on redimentionne pour avoir la bonne hauteur et on coupe ce qui dépasse en largeur
Cas n°5 : L’image dépasse en largeur et en hauteur et est proportionnement trop grande en hauteur : on redimentionne pour avoir la bonne largeur et on coupe ce qui dépasse en hauteur

function creerMiniature($chemin,$H,$W)

{

$chemin2=substr($chemin,0,strrpos($chemin,'.')).'_mini.jpg';

$img_src_resource=imagecreatefromjpeg($chemin);

list( $w, $h ) = getimagesize($chemin);

//Cas n°1 : L'image est plus petite en hauteur et en largeur : on la recopie telle quelle

if(($w<=$W) and ($h<=$H))

{

$img_dst_resource = imagecreatetruecolor($w, $h);

imagecopyresampled($img_dst_resource,$img_src_resource,0,0,0,0,$w,$h,$w,$h);

imagejpeg( $img_dst_resource, $chemin2,100);

}

//Cas n°2 : L'image dépasse en hauteur mais est trop petite en largeur :

// On coupe ce qui dépasse en hauteur

if(($w<=$W) and ($h>$H))

{

$img_dst_resource = imagecreatetruecolor($w, $H);

imagecopyresampled($img_dst_resource,$img_src_resource,0,0,0,0,$w,$H,$w,$H);

imagejpeg( $img_dst_resource, $chemin2,100);

}

//Cas n°3 : L'image dépasse en largeur mais est trop petite en hauteur :

// On coupe ce qui dépasse en largeur

if(($w>$W) and ($h<=$H))

{

$img_dst_resource = imagecreatetruecolor($W, $h);

imagecopyresampled($img_dst_resource,$img_src_resource,0,0,0,0,$W,$h,$W,$h);

imagejpeg( $img_dst_resource, $chemin2,100);

}

//Cas n°4 : L'image dépasse en largeur et en hauteur et est proportionnement trop grande en largeur

// On redimentionne pour avoir la bonne hauteur et on coupe ce qui dépasse en largeur

if(($w>$W) and ($h>$H) and (($w/$h)>($W/$H)))

{

$img_dst_resource = imagecreatetruecolor($W, $H);

imagecopyresampled($img_dst_resource,$img_src_resource,0,0,0,0,$W,$H,$W*$h/$H,$h);

imagejpeg( $img_dst_resource, $chemin2,100);

}

//Cas n°5 : L'image dépasse en largeur et en hauteur et est proportionnement trop grande en hauteur

// On redimentionne pour avoir la bonne largeur et on coupe ce qui dépasse en hauteur

if(($w>$W) and ($h>$H) and (($w/$h)<=($W/$H)))

{

$img_dst_resource = imagecreatetruecolor($W, $H);

imagecopyresampled($img_dst_resource,$img_src_resource,0,0,0,0,$W,$H,$w,$w*$H/$W);

imagejpeg( $img_dst_resource, $chemin2,100);

}

}