這是一個不錯的PHP 縮圖程式,找到的時候好興奮說
使用上很方便,只要照著自己需求去設定就可以囉
我有刪除部分不需要的內容,如果像看原文最下面有轉貼網址。


兩個 function, 一個算比例要多少(getResizePercent)
另一個 function 依照比例將圖片縮小
縮到剛好符合預計縮小的其中一邊的尺寸(ImageResize).

使用上只要將這兩個 function  一起放進程式裡面
直接呼叫 ImageResize(), 把參數傳進去即可.

ImageResize function

  • Usage: ImageResize('ram/xxx.jpg', 'ram/ooo.jpg');
  • 抓取要縮圖的比例, 下述只處理 jpeg
  • $from_filename : 來源路徑, 檔名, ex: /tmp/xxx.jpg
  • $save_filename : 縮圖完要存的路徑, 檔名, ex: /tmp/ooo.jpg
  • $in_width : 縮圖預定寬度
  • $in_height: 縮圖預定高度
  • $quality  : 縮圖品質(1~100)
getResizePercent function
  • 抓取要縮圖的比例
  • $source_w : 來源圖片寬度
  • $source_h : 來源圖片高度
  • $inside_w : 縮圖預定寬度
  • $inside_h : 縮圖預定高度
  • Test:
  • $v = (getResizePercent(1024, 768, 400, 300));
  • echo 1024 * $v . "\n";
  • echo  768 * $v . "\n";


程式碼如下:



/**
  * 抓取要縮圖的比例, 下述只處理 jpeg
 * $from_filename : 來源路徑, 檔名, ex: /tmp/xxx.jpg
 * $save_filename : 縮圖完要存的路徑, 檔名, ex: /tmp/ooo.jpg
 * $in_width : 縮圖預定寬度
 * $in_height: 縮圖預定高度
 * $quality  : 縮圖品質(1~100)
 *
 * Usage:
 *   ImageResize('ram/xxx.jpg', 'ram/ooo.jpg');
 */
function ImageResize($from_filename$save_filename$in_width=400$in_height=300$quality=100)
{
    
$allow_format = array('jpeg''png''gif');
    
$sub_name $t '';

    
// Get new dimensions
    
$img_info getimagesize($from_filename);
    
$width    $img_info['0'];
    
$height   $img_info['1'];
    
$imgtype  $img_info['2'];
    
$imgtag   $img_info['3'];
    
$bits     $img_info['bits'];
    
$channels $img_info['channels'];
    
$mime     $img_info['mime'];

    list(
$t$sub_name) = split('/'$mime);
    if (
$sub_name == 'jpg') {
        
$sub_name 'jpeg';
    }

    if (!
in_array($sub_name$allow_format)) {
        return 
false;
    }

    
// 取得縮在此範圍內的比例
    
$percent getResizePercent($width$height$in_width$in_height);
    
$new_width  $width $percent;
    
$new_height $height $percent;

    
// Resample
    
$image_new imagecreatetruecolor($new_width$new_height);

    
// $function_name: set function name
    //   => imagecreatefromjpeg, imagecreatefrompng, imagecreatefromgif
    /*
    // $sub_name = jpeg, png, gif
    $function_name = 'imagecreatefrom'.$sub_name;
    $image = $function_name($filename); //$image = imagecreatefromjpeg($filename);
    */
    
$image imagecreatefromjpeg($from_filename);

    
imagecopyresampled($image_new$image0000$new_width$new_height$width$height);

    return 
imagejpeg($image_new$save_filename$quality);
}

/**
 * 抓取要縮圖的比例
 * $source_w : 來源圖片寬度
 * $source_h : 來源圖片高度
 * $inside_w : 縮圖預定寬度
 * $inside_h : 縮圖預定高度
 *
 * Test:
 *   $v = (getResizePercent(1024, 768, 400, 300));
 *   echo 1024 * $v . "\n";
 *   echo  768 * $v . "\n";
 */
function getResizePercent($source_w$source_h$inside_w$inside_h)
{
    if (
$source_w $inside_w && $source_h $inside_h) {
        return 
1// Percent = 1, 如果都比預計縮圖的小就不用縮
    
}

    
$w_percent $inside_w $source_w;
    
$h_percent $inside_h $source_h;

    return (
$w_percent $h_percent) ? $h_percent $w_percent;
}
?>

 轉貼處:http://plog.longwin.com.tw/programming/2007/08/20/php_image_resize_2007

文章標籤
全站熱搜
創作者介紹
創作者 Jump 的頭像
Jump

Jump的部落格

Jump 發表在 痞客邦 留言(1) 人氣(1,717)