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()'

Posté le jeudi 04 octobre 2007 dans .

Commentaires

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.