php實現圖片縮放,超詳細註釋
阿新 • • 發佈:2019-01-07
<?php
//header("content-type:image/png");
* @todo 把一張圖片按照使用者定義的高寬進行縮放,並把處理後的圖片重新命名,放在指定資料夾
* @param string $width:使用者定義的需要處理成的目標寬度
* @param string $height:使用者定義的需要處理的目標高度
* @param string $filename: 圖片的名字
* @param string $path:可選引數,儲存的新圖片的路徑,若不傳值,則預設當前目錄
* @return string $newname: 返回的是處理後的圖片的新名字
*/
function deal($width,$height,$filename,$path=''){
/* getimagesize 獲取影象的資料,返回值是一個數組,
* arr[0]代表圖片的寬度 ,arr[1]代表圖片的高度,arr[2]代表影象型別,返回的是數字
* arr[3] 代表包含圖片高寬的字串,如width='200' height='100',可直接用在html標籤裡面
* arr[bits]代表影象的每種顏色的位數,用二進位制表示
* arr[mime]影象的mime資訊,如image/png
* arr[channels]:影象的通道值
* */
$arr = getimagesize($filename);
//判斷傳入的圖片的格式,建立、生成相應的圖片格式
switch ($arr['mime']){//mime獲取影象的mime值,用於判斷建立圖片的格式和生成圖片的格式
case "image/png":
$srcType = 'imagecreatefrompng';
$outType = 'imagepng';
break;
case "image/gif":
$srcType = 'imagecreatefromgif';
$outType = 'imagegif';
break;
case "image/jpg":
case "image/jpeg":
$srcType = 'imagecreatefromjpeg';
$outType = 'imagejpeg';
break;
}
$src_img = $srcType($filename);
$src_w = $arr[0]; //獲取傳入圖片的真實寬度
$src_h = $arr[1]; //獲取傳入圖片的真實高度
$des_w = $width; //使用者定義的傳入的寬度,即目標寬度
$des_h = $height; //使用者定義的傳入的高度,即目標高度
$scale_w = $src_w/$des_w; //獲取真實寬度與目標寬度的比例
$scale_h = $src_h/$des_h; //獲取真實高度與目標高度的比例
if($src_w <= $des_w && $src_h <= $des_h){
$true_w = $src_w;
$true_h = $src_h;
$des_img = imagecreatetruecolor($true_w, $true_h);
//若scale_w > scale_h ,即原圖片的寬大於高,橫向圖片,依據寬為基準
}elseif ($scale_w >= $scale_h){
$true_w = $src_w/$scale_w;
$true_h = $src_h/$scale_w;
$des_img = imagecreatetruecolor($true_w,$true_h);
//否則就是原圖片的高大於寬,豎向圖片,則依據高為基準來縮放
}else{
$true_w = $src_w/$scale_h;
$true_h = $src_h/$scale_h;
$des_img = imagecreatetruecolor($true_w,$true_h);
}
imagecopyresized($des_img, $src_img, 0, 0, 0, 0, $true_w, $true_h, $src_w, $src_h);
//下面是重新命名操作後的圖片
$temp = explode('/', $filename); //把路徑、檔名拆分成陣列,方便操作,例如:img/new/a.png,被拆分成temp['img','new','a.png'];
$temp = array_pop($temp); //通過pop刪除操作,返回最後一個引數值,此引數值為圖片名字,如a.png
$ext = substr($temp, strrpos($temp, '.'));//獲取圖片的字尾名,通過字串擷取,從最後一個.出現的位置擷取到末尾,如.png
$name = substr($temp, 0,strrpos($temp, '.'));//獲取圖片的名字,通過字串擷取,擷取最後一個.出現的位置之前的全部字元,如a
$truePath = !empty($path) ? $path."/" : ''; //將路徑名儲存在變數truePath裡面
//如果路徑存在,且不為路徑名,如c.txt,則建立一個名為c.txt的路徑(資料夾);如果路徑存在,且為路徑名,則執行下一句;如果未傳入路徑名,則執行下一句
if(!empty($truePath) && !is_dir($truePath)){
mkdir($truePath,0777,true);
}
//給圖片新命名,以路徑名+原名字+自定義字元+字尾來命名。圖片會存放在相應路徑下
$newname = $truePath.$name."_deal".$ext;
$outType($des_img,$newname);
//$outType($des_img);
return $newname;
}
$des_w = 200;
$des_h = 250;
$filename = 'img/100-100.png';
$name = deal($des_w,$des_h,$filename);
var_dump($name);
?>