RSS

タグ別アーカイブ: 画像

GDライブラリで透過形式の画像をリサイズするのに便利な関数

Smart Image Resizing while Preserving Transparency With PHP and GD Library

function smart_resize_image( $file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true, $use_linux_commands = false )
   {
     if ( $height        return false;
     }

    $info = getimagesize($file);
     $image = '';

    $final_width = 0;
     $final_height = 0;
     list($width_old, $height_old) = $info;

    if ($proportional) {
       if ($width == 0) $factor = $height/$height_old;
       elseif ($height == 0) $factor = $width/$width_old;
       else $factor = min ( $width / $width_old, $height / $height_old);

      $final_width = round ($width_old * $factor);
       $final_height = round ($height_old * $factor);

    }
     else {
       $final_width = ( $width        $final_height = ( $height = 0) {

         // Get the original image's transparent color's RGB values
         $trnprt_color    = imagecolorsforindex($image, $trnprt_indx);

         // Allocate the same color in the new image resource
         $trnprt_indx    = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);

         // Completely fill the background of the new image with allocated color.
         imagefill($image_resized, 0, 0, $trnprt_indx);

         // Set the background color for new image to transparent
         imagecolortransparent($image_resized, $trnprt_indx);

      }
      // Always make a transparent background color for PNGs that don't have one allocated already
       elseif ($info[2] == IMAGETYPE_PNG) {

         // Turn off transparency blending (temporarily)
         imagealphablending($image_resized, false);

         // Create a new transparent color for image
         $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);

         // Completely fill the background of the new image with allocated color.
         imagefill($image_resized, 0, 0, $color);

         // Restore transparency blending
         imagesavealpha($image_resized, true);
       }
     }

    imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);

    if ( $delete_original ) {
       if ( $use_linux_commands )
         exec('rm '.$file);
       else
         @unlink($file);
     }

    switch ( strtolower($output) ) {
       case 'browser':
         $mime = image_type_to_mime_type($info[2]);
         header("Content-type: $mime");
         $output = NULL;
       break;
       case 'file':
         $output = $file;
       break;
       case 'return':
         return $image_resized;
       break;
       default:
       break;
     }

    switch ( $info[2] ) {
       case IMAGETYPE_GIF:
         imagegif($image_resized, $output);
       break;
       case IMAGETYPE_JPEG:
         imagejpeg($image_resized, $output);
       break;
       case IMAGETYPE_PNG:
         imagepng($image_resized, $output);
       break;
       default:
         return false;
     }

    return true;
   }
広告
 
コメントする

投稿者: : 2011/09/11 投稿先 Codes

 

タグ: , ,