/* * created on 2010-6-21 * * the class for control image * * made by s71ence * * @$img_path 圖片路徑 * @$is_auto_reduce 圖片是否自動按照大小等級壓縮 1是 * @$is_appoint 是否手動進行壓縮或放大 1是 * @$multiple 手動指定壓縮/放大比例 * @$is_water_str 是否加浮水印文字 1是 * @$water_str 浮水印文字 * @$is_watermark 是否加浮水印圖片 1是 * @$logo_path 浮水印圖片路徑 * @$is_display 是否顯示圖片 1是 * @$is_create 是否產生壓縮後的圖片 1是 * * 注: * 1.產生新圖時不可顯示圖片,即$isdisplay和$iscreate不可同時置為1 * 2.當圖片寬或高小於1000時,需手動設定壓縮比例進行壓縮 * 3.不建議啟用浮水印,若要啟用,建議原圖片大小最好在1000以內 * 4.浮水印文字中不可含有中文 * 5.新產生的圖片在原目錄檔案中,支援n個層級 */ class image_control { private $img_path; private $is_auto_reduce; private $is_appoint; private $multiple; private $is_water_str; private $water_str; private $is_watermark; private $logo_path; private $is_display; private $is_create; function __construct($img_path,$is_auto_reduce,$is_appoint,$multiple,$is_water_str,$water_str,$is_watermark,$logo_path,$is_display,$is_create) { $this->img_path=$img_path; $this->is_auto_reduce=$is_auto_reduce; $this->is_appoint=$is_appoint; $this->multiple=$multiple; $this->is_water_str=$is_water_str; $this->water_str=$water_str; $this->is_watermark=$is_watermark; $this->logo_path=$logo_path; $this->is_display=$is_display; $this->is_create=$is_create; } function img_control() { //擷取原圖 $img_info=getimagesize($this->img_path); switch($img_info[2]) { case 1: $img_get=@imagecreatefromgif($this->img_path); break; case 2: $img_get=@imagecreatefromjpeg($this->img_path); break; case 3: $img_get=@imagecreatefrompng($this->img_path); break; } //文字浮水印 if($this->is_water_str==1) { //imagettftext(原圖,文字大小,文字旋轉,浮水印起始座標x,浮水印起始座標y,$te,'simhei.ttf',$str); $te=imagecolorallocate($img_get,255,255,255); $str=iconv("gbk","utf-8",$this->water_str);//浮水印文字 imagettftext($img_get,16,0,$img_info[0]-200,$img_info[1]-20,$te,'msyh.ttf',$str); } //圖片浮水印 if($this->is_watermark==1) { //浮水印圖片處理 $logo_info=getimagesize($this->logo_path); switch($logo_info[2]) { case 1: $logo=@imagecreatefromgif($this->logo_path); break; case 2: $logo=@imagecreatefromjpeg($this->logo_path); break; case 3: $logo=@imagecreatefrompng($this->logo_path); break; } //浮水印logo圖片 //函數說明:imagecopy(原圖,浮水印圖片,浮水印座標x,浮水印座標y,浮水印圖片開始座標x,浮水印圖片開始座標y,'浮水印圖片寬','浮水印圖片高'); imagecopy($img_get,$logo,0,0,0,0,$logo_info[0],$logo_info[1]); } //自動圖片壓縮 按圖片大小分級自動壓縮 //imagecopyresized(畫布,原圖,畫布起始x座標,畫布起始y座標,原圖起始x座標,原圖起始x座標,新圖片寬,新圖片高,原圖片寬,原圖片高); if($this->is_auto_reduce==1) { if($img_info[0]>=3000 || $img_info[1]>=3000) { $new_image_get=imagecreatetruecolor($img_info[0]*0.03,$img_info[1]*0.03);//產生畫布 imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.03,$img_info[1]*0.03,$img_info[0],$img_info[1]); } else if($img_info[0]>=2500 || $img_info[1]>=2500) { $new_image_get=imagecreatetruecolor($img_info[0]*0.04,$img_info[1]*0.04); imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.04,$img_info[1]*0.04,$img_info[0],$img_info[1]); } else if($img_info[0]>=2000 || $img_info[1]>=2000) { $new_image_get=imagecreatetruecolor($img_info[0]*0.05,$img_info[1]*0.05); imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.05,$img_info[1]*0.05,$img_info[0],$img_info[1]); } else if($img_info[0]>=1500 || $img_info[1]>=1500) { $new_image_get=imagecreatetruecolor($img_info[0]*0.08,$img_info[1]*0.08); imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.08,$img_info[1]*0.08,$img_info[0],$img_info[1]); } else if($img_info[0]>=1000 || $img_info[1]>=1000) { $new_image_get=imagecreatetruecolor($img_info[0]*0.1,$img_info[1]*0.1); imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.1,$img_info[1]*0.1,$img_info[0],$img_info[1]); } else if($img_info[0]>=500 || $img_info[1]>=500) { $new_image_get=imagecreatetruecolor($img_info[0]*0.2,$img_info[1]*0.2); imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.2,$img_info[1]*0.2,$img_info[0],$img_info[1]); } else if($img_info[0]>=300 || $img_info[1]>=300) { $new_image_get=imagecreatetruecolor($img_info[0]*0.3,$img_info[1]*0.3); imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.3,$img_info[1]*0.3,$img_info[0],$img_info[1]); } else { $new_image_get=imagecreatetruecolor($img_info[0]*1,$img_info[1]*1); imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*1,$img_info[1]*1,$img_info[0],$img_info[1]); } } //手動圖片壓縮 //imagecopyresized(畫布,原圖,畫布起始x座標,畫布起始y座標,原圖起始x座標,原圖起始x座標,新圖片寬,新圖片高,原圖片寬,原圖片高); if($this->is_appoint) { $new_image_get=imagecreatetruecolor($img_info[0]*$this->multiple,$img_info[1]*$this->multiple);//產生畫布 imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*$this->multiple,$img_info[1]*$this->multiple,$img_info[0],$img_info[1]); } //映像輸出 if($this->is_display==1) { header("content-type: image/jpeg"); return imagejpeg($new_image_get); } //新映像產生 if($this->is_create==1) { $new_name=explode("/",$this->img_path); $new_name_string=""; for($i=0;$i<count($new_name)-1;$i++) { $new_name_string.=$new_name[$i]."/"; } $new_img_path=$new_name_string."new".$new_name[$i]; if(imagejpeg($new_image_get,$new_img_path) && imagejpeg($img_get,$this->img_path)) { setcookie("img_new_path", $new_img_path); //return "圖片產生成功!<br/>新圖:".$new_img_path."<br/>原圖:".$this->img_path; } else { return "圖片產生失敗,請檢查配置是否正確!"; } } } function __desctruct() { //clear } } |