Redimensionner une image

Contenu du snippet

<?php
function imageResize ($sFileNameFrom, $sFileNameTo, $KEEP_PROPORTIONS) {
 $aProportions = array ('DO_NOT_KEEP_PROPORTIONS', 'KEEP_PROPORTIONS_ON_WIDTH', 'KEEP_PROPORTIONS_ON_HEIGHT', 'KEEP_PROPORTIONS_ON_BIGGEST', 'KEEP_PROPORTIONS_ON_SMALLEST');
 if (!file_exists ($sFileNameFrom) || !is_array ($KEEP_PROPORTIONS) || empty ($KEEP_PROPORTIONS)) {
  return false;
 } else {
  $aImg = @getimagesize ($sFileNameFrom);
  if (false === $aImg) {
   return false;
  } else {
   $aTypes = array (1 => 'gif', 2 => 'jpeg', 3 => 'png');
   if (!in_array ($aImg[2], array_keys ($aTypes))) {
    return false;
   } else {
    if (!in_array ($KEEP_PROPORTIONS[0], $aProportions)) {
     return false;
    }
    $iCmpt = count ($KEEP_PROPORTIONS);
    if (!empty ($KEEP_PROPORTIONS) && is_array ($KEEP_PROPORTIONS) && ($iCmpt >= 2) && is_int ($KEEP_PROPORTIONS[1])) {
     switch ($KEEP_PROPORTIONS[0]) {
      case 'KEEP_PROPORTIONS_ON_WIDTH' :
       $width = $KEEP_PROPORTIONS[1];
       $height = round ($aImg[1] / (round ($aImg[0]/$KEEP_PROPORTIONS[1])));
       break;
      case 'KEEP_PROPORTIONS_ON_HEIGHT' :
       $height = $KEEP_PROPORTIONS[1];
       $width = round ($aImg[0]/ (round ($aImg[1]/$KEEP_PROPORTIONS[1])));
       break;
      case 'KEEP_PROPORTIONS_ON_BIGGEST' :
       if ($aImg[0] >= $aImg[1]) {
        $width = $KEEP_PROPORTIONS[1];
        $height = round ($aImg[1] / (round ($aImg[0]/$KEEP_PROPORTIONS[1])));
       } else {
        $height = $KEEP_PROPORTIONS[1];
        $width = round ($aImg[0] / (round ($aImg[1]/$KEEP_PROPORTIONS[1])));
       }
       break;
      case 'KEEP_PROPORTIONS_ON_SMALLEST' :
       if ($aImg[0] <= $aImg[1]) {
        $width = $KEEP_PROPORTIONS[1];
        $height = round ($aImg[1] / (round ($aImg[0]/$KEEP_PROPORTIONS[1])));
       } else {
        $height = $KEEP_PROPORTIONS[1];
        $width = round ($aImg[0] / (round ($aImg[1]/$KEEP_PROPORTIONS[1])));
       }
       break;
      case 'DO_NOT_KEEP_PROPORTIONS':
       if ($iCmpt !== 3 || !is_int ($KEEP_PROPORTIONS[2])) {
        return false;
       }
       $width = $KEEP_PROPORTIONS[1];
       $height = $KEEP_PROPORTIONS[2];
       break;
     }
    }
    $getImg = create_function ('$sFileNameFrom', 'return @imagecreatefrom'.$aTypes[$aImg[2]].'($sFileNameFrom);');
    $saveImg = create_function ('$img, $sFileNameTo', 'return @image'.$aTypes[$aImg[2]].'($img, $sFileNameTo);');
    $im = $getImg ($sFileNameFrom);
    $image_p = imagecreatetruecolor($width, $height);
    imagecolortransparent ($image_p, 0);
    imagecopyresampled($image_p, $im, 0, 0, 0, 0, $width, $height, $aImg[0], $aImg[1]);
    if ($saveImg ($image_p, $sFileNameTo)) {
     return true;
    } else {
     return false;
    }
   }
  }
 }
}
imageResize ('transparent.gif', 'thumb_transparent.gif', array ('DO_NOT_KEEP_PROPORTIONS', 100, 100));
?>


Compatibilité : PHP 4, PHP 5

Disponible dans d'autres langages :

A voir également