今天因為需要縮小/放大圖片,並抓取正中間的區域,所以寫這個function方便以後 只要傳入路徑都可以縮小或放大指定圖片,也可以使用上傳的圖片路徑做指定大小的縮放與切割,使用imageCopyResampled與imagecopy 兩個function作執行。
/** * $imgSrc圖片路徑 * $type 圖片類型(jpeg/png/gif) * $goalSizeWidth 要縮小的寬度 * $goalSizeHeight 要縮小的高度 * * EX: imgResize ('image/images.jpge','image/jpge',100,100); * */ function imgResize ($imgSrc,$type,$goalSizeWidth,$goalSizeHeight){ //開啟圖片 switch ($type){ case 'image/jpeg': $source = @imagecreatefromjpeg($imgSrc); break; case 'image/png': $source = @imagecreatefrompng($imgSrc); break; case 'image/gif': $source = @imagecreatefromgif($imgSrc); break; default : $source = @imagecreatefromjpeg($imgSrc); } /*Returns an image resource identifier on success, FALSE on errors.*/ //開啟圖片 上面若無法開啟會回傳FALSE if (!$source){ return FALSE; } // 取得圖片原始寬度與高度 $originalWidth = imagesX($source); $originalHeight = imagesY($source); // 計算縮圖尺寸 if ($originalWidth<$originalHeight) { //如果 高大於寬 $goalWidth= $goalSizeWidth; //寬設定為指定大小 $goalHeight = intval($originalHeight*$goalWidth /$originalWidth); //以寬縮小/放大的比例縮放 } else { $goalHeight = $goalSizeHeight; //高設定為指定大小 $goalWidth = intval($originalWidth*$goalHeight/$originalHeight); //以高縮小/放大的比例縮放 } // 建立圖片空間(給予要建立的大小 W,H ) $decrease = imageCreateTrueColor($goalWidth, $goalHeight); /*bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )*/ // 縮小圖片,因為要取樣在中間,所以先完成縮小後才擷取,在此不直接擷取 imageCopyResampled( $decrease, $source, 0, 0, //要擷取的位置 0, 0, //要擷取的位置 $goalWidth,$goalHeight, //目標寬高 $originalWidth,$originalHeight //原始寬高 ); // 圖片選取的起始位址,抓中間 $cropX = intval(($goalWidth - $goalSizeWidth )/2); $cropY = intval(($goalHeight - $goalSizeHeight )/2); // 建立圖片空間(給予要建立的大小 W,H ) $crop = imageCreateTrueColor($goalSizeWidth, $goalSizeHeight); //設定PNG透明度 if($type == 'image/png'){ $black = imagecolorallocate($crop, 0, 0, 0); imagecolortransparent($crop, $black); } /*bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )*/ // 複製圖片並指定範圍 imageCopy( $crop,$decrease, 0,0, $cropX, $cropY, $goalSizeWidth, $goalSizeHeight ); switch ($type){ case 'image/jpeg': imageJpeg($crop,$imgSrc); break; case 'image/png': imagepng($crop,$imgSrc); break; case 'image/gif': imagegif($crop,$imgSrc); break; default : imageJpeg($crop,$imgSrc); } return TRUE; }
也可以使用$_FILE上傳的圖檔暫存路徑做處理
imgResize($_FILES['MyPhoto']['tmp_name'],$_FILES['MyPhoto']['type'],100,100);