在開發網頁中,圖片放大縮小或更改高度、寬度是常有的問題
除了用一些軟體可以處理之外,PHP原生的函式中對於這部份也可以處理
class ResizeImage { var $image; var $image_type_id; function load($filename) { //取得圖片資訊 $image_info = getimagesize($filename); //取得圖片類型 $this -> image_type_id = $image_info[2]; //判斷圖片類型,並建立圖片物件 if( $this -> image_type_id == IMAGETYPE_JPEG ) { $this -> image = imagecreatefromjpeg($filename); } elseif( $this -> image_type_id == IMAGETYPE_GIF ) { $this -> image = imagecreatefromgif($filename); } elseif( $this -> image_type_id == IMAGETYPE_PNG ) { $this -> image = imagecreatefrompng($filename); } } function save($filename, $image_type_id = IMAGETYPE_JPEG) { if( $image_type_id == IMAGETYPE_JPEG ) { imagejpeg($this -> image,$filename,75); } elseif( $image_type_id == IMAGETYPE_GIF ) { imagegif($this -> image,$filename); } elseif( $image_type_id == IMAGETYPE_PNG ) { imagepng($this -> image,$filename); } //修改權限 chmod($filename,0755); } function getWidth() { //取得寬度 return imagesx($this -> image); } function getHeight() { //取得高度 return imagesy($this -> image); } function resizeToHeight($height) { //高度縮放(寬度等比縮放) $ratio = $height / $this -> getHeight(); $width = $this -> getWidth() * $ratio; $this->resize($width,$height); } function resizeToWidth($width) { //寬度縮放(高度等比縮放) $ratio = $width / $this -> getWidth(); $height = $this -> getheight() * $ratio; $this->resize($width,$height); } function scale($scale) { //百分比縮放 $width = $this -> getWidth() * $scale/100; $height = $this -> getheight() * $scale/100; $this->resize($width,$height); } function resize($width,$height) { //imagecreatetruecolor會產生特定長寬的黑色圖形,並建立圖片物件 $new_image = imagecreatetruecolor($width, $height); //利用imagecopyresampled resize圖片 //imagecopyresampled(目地圖片,來源圖片,目地x座標,目地y座標,來源x座標,來源y座標,目地寬度,目地高度,來源寬度,來源高度) imagecopyresampled($new_image, $this -> image, 0, 0, 0, 0, $width, $height, $this -> getWidth(), $this -> getHeight()); //將image變數指向新的圖片 $this -> image = $new_image; } }
Example:
$image = new ResizeImage(); $image -> load("johnson.jpg"); //縮放至120% $image -> scale(120); $image -> save('pic1.jpg'); //修改高度 $image->resizeToHeight(500); $image->save('pic2.jpg');