這是一個不錯的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, $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;
}
?>
轉貼處:http://plog.longwin.com.tw/programming/2007/08/20/php_image_resize_2007
--
轉自 https://oni88611.pixnet.net/blog/post/55154830
留言列表