/*
* 抓取要縮圖的比例, 下述只處理 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, $in_height, $quality)
{
$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'];
$in_width = ($in_width == '') ? $width : $in_width;
$in_height = ($in_height == '') ? $height : $in_height;
$quality = ($quality == '') ? 100 : $quality;
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;
/*
* echo "from_filename = ".$from_filename."
";
* echo "width = ".$width."
";
* echo "height = ".$height."
";
* echo "in_width = ".$in_width."
";
* echo "in_height = ".$in_height."
";
* echo "percent = ".$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;
if ($sub_name=='png')
return $function_name($image_new, $save_filename, intval($quality / 10 - 1));
$image = $function_name($filename); //$image = imagecreatefromjpeg($filename);
*/
$image = imagecreatefromjpeg($from_filename);
imagecopyresampled($image_new, $image, 0, 0, 0, 0, $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;
}
?>
2012年9月11日 星期二
PHP 縮圖
原文:http://webcache.googleusercontent.com/search?q=cache:EeR-EeFI5pUJ:blog.longwin.com.tw/2007/08/php_image_resize_2007/+&cd=1&hl=zh-TW&ct=clnk
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言