Fonctions de redimensionnement d'images
Dans le but de me simplifier la vie lors de la mise en ligne d'images via un outil d'administration, je me suis créé quatres fonctions de redimensionnement d'images.
Ces quatres fonctions sont les plus simples qu'il soit et vous sont proposées sans aucune autre prétention que de vous être utiles. N'hésitez pas à faire vos remarques et apporter vos améliorations.
Fonctionnalités
- Basées sur la librairie GD ;
- Elles supportent les formats d'image reconnus par GD (testées avec succès pour JPEG, PNG, GIF, BMP) ;
- Elles retournent toutes une ressource image, vous pouvez ensuite les manipuler avec les fonctions image de PHP ;
Description
img_resize( str $filename, int $width, int $height )
: redimensionne une image dont le nom (ou chemin) est passé en paramètre, les deux autres paramètres étant la largeur et la hauteur finale.img_resize_x( str $filename, int $width )
: redimensionne une image sur la largeur, la hauteur étant conservée suivant la proportion.img_resize_y( str $filename, int $height )
: redimensionne une image sur la hauteur, la largeur étant conservée suivant la proportion.img_resize_auto( str $filename, int $maxsize )
: redimensionne une image sur le coté le plus grand et garde l'autre proportionnel.
Exemple
$filename = 'test.jpg'; // image de 1024x768 par ex // Redimensionnement "forcé", retourne une ressource image de 300x200 pixels $img1 = img_resize($filename, 300, 200); // Redimensionnement horizontal, retourne une ressource image de 200x150 pixels $img2 = img_resize_x($filename, 200); // Redimensionnement vertical, retourne une ressource image de 267x200 pixels $img3 = img_resize_y($filename, 200); // Redimensionnement automatique, retourne une ressource image de 200x150 pixels $img4 = img_resize_auto($filename, 200);
Code source
function img_resize( $filename, $newWidth, $newHeight ) { // Récupération de la taille de l'image $imageSize = getimagesize($filename); $currentWidth = $imageSize[0]; $currentHeight = $imageSize[1]; $funcName = str_replace('/', 'createfrom', $imageSize['mime']); // Création de la miniature $srcImg = @$funcName($filename); if ( !$srcImg ) { $im = imagecreate(150, 30); /* Création d'une image blanche */ $bgc = imagecolorallocate($im, 255, 255, 255); $tc = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 150, 30, $bgc); // Affichage d'un message d'erreur imagestring($im, 1, 5, 5, "Erreur de chargement de l'image ".basename($filename), $tc); return $im; } if ( !$dstImg = @imagecreatetruecolor($newWidth, $newHeight) ) { $dstImg = @imagecreate($newWidth, $newHeight); } if ( !@imagecopyresampled($dstImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $currentWidth, $currentHeight) ) { imagecopyresized($dstImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $currentWidth, $currentHeight); } return $dstImg; } // end of 'img_resize()' function img_resize_x ( $filename, $maxWidth ) { // Récupération de la taille de l'image $imageSize = getimagesize($filename); $newWidth = $currentWidth = $imageSize[0]; $newHeight = $currentHeight = $imageSize[1]; if ( $currentWidth > $maxWidth ) { $ratio = $currentWidth / $currentHeight; $newWidth = $maxWidth; $newHeight = round($newWidth / $ratio); } return img_resize($filename, $newWidth, $newHeight); } // end of 'img_resize_x()' function img_resize_y ( $filename, $maxHeight ) { // Récupération de la taille de l'image $imageSize = getimagesize($filename); $newWidth = $currentWidth = $imageSize[0]; $newHeight = $currentHeight = $imageSize[1]; if ( $currentHeight > $maxHeight ) { $ratio = $currentWidth / $currentHeight; $newHeight = $maxHeight; $newWidth = round($newHeight * $ratio); } return img_resize($filename, $newWidth, $newHeight); } // end of 'img_resize_y()' function img_resize_auto( $filename, $maxSize ) { // Récupération de la taille de l'image $imageSize = getimagesize($filename); $width = $imageSize[0]; $height = $imageSize[1]; if ( $width >= $height && $width > $maxSize ) { return img_resize_x($filename, $maxSize); } elseif ( $height > $width && $height > $maxSize ) { return img_resize_y($filename, $maxSize); } else { return imagecreatefromjpeg($filename); } } // end of 'img_resize_auto()'
Commentaires
-
David Duret a écrit le 04/10/2007 :
L'ami Waldo de mon-beulogue.com me fait savoir à l'instant qu'il a utilisé ces fonctions (un peu modifiées) au sein d'un script de son cru à propos du redimensionnement et rognage à la volée des images : www.mon-beulogue.com/[...]/redimensionner-et-rogner-une-image-en-php.html ; le filou :)
-
Waldo a écrit le 04/10/2007 :
Merci mon cher Pilgrim (C'est mon Maître alors pas touche!). J'ai fait ça un jours de grisaille où l'envie de développer quelque chose d'utile était plus fort que d'aller chanter sous la pluie. Les fonctions de bases sont bien de Pilgrim, on ne peut quand même pas lui retirer son génie et s'attribuer tout son mérite!
A++
Ajouter un commentaire
Il n'est plus possible de réagir à cette entrée directement mais si vous pensez que votre intervention peut être intéressante, envoyez-moi votre commentaire, je l'ajouterai ici en votre nom.