php常用圖片處理類
更新時(shí)間:2016年03月16日 11:50:18 作者:jerrylsxu
這篇文章主要介紹了php常用圖片處理類,方便大家進(jìn)行學(xué)習(xí)研究,感興趣的小伙伴們可以參考一下
本文為大家分享的php常用圖片處理類,供大家參考學(xué)習(xí),具體內(nèi)容如下
<?php /*已知問題:1.在圖片縮放功能中,使用imagecreatetruecolor函數(shù)創(chuàng)建畫布,并使用透明處理算法,但PNG格式的圖片無法透明。用imagecreate函數(shù)創(chuàng)建畫布可以解決這個(gè)問題,但是縮放出來的圖片色數(shù)太少了 * * *type值: * (1):代表使用圖片縮放功能,此時(shí),$value1代表縮放后圖片的寬度,$value2代表縮放后圖片的高度 * (2):代表使用圖片裁剪功能,此時(shí),$value1代表裁剪開始點(diǎn)的坐標(biāo),例:從原點(diǎn)開始即是“0,0”前面是x軸后面是y軸,中間用,分隔,$value2代表裁剪的寬度和高度,同樣也是“20,20”的形式使用 * (3):代表使用加圖片水印功能,此時(shí),$value1代表水印圖片的文件名,$value2代表水印在圖片中的位置,有10值個(gè)可以選,1代表左上,2代表左中,3代表左右,4代表中左,5代表中中,6代表中右,7代表下做,8代表下中,9代表下右,0代表隨機(jī)位置 * */ class image{ private $types; //使用的功能編號(hào),1為圖片縮放功能 2為圖片裁剪功能 3,為圖片加圖片水印功能 private $imgtype;//圖片的格式 private $image; //圖片資源 private $width;//圖片寬度 private $height;//圖片高度 private $value1;//根據(jù)所傳type值的不同,$value1分別代表不同的值 private $value2;//根據(jù)所傳type值的不同,$value2分別代表不同的值 private $endaddress;//輸出后的地址+文件名 function __construct($imageaddress, $types, $value1="", $value2="", $endaddress){ $this->types=$types; $this->image=$this->imagesources($imageaddress); $this->width=$this->imagesizex(); $this->height=$this->imagesizey(); $this->value1=$value1; $this->value2=$value2; $this->endaddress=$endaddress; } function outimage(){ //根據(jù)傳入type值的不同,輸出不同的功能 switch($this->types){ case 1: $this->scaling(); break; case 2: $this->clipping(); break; case 3: $this->imagewater(); break; default: return false; } } private function imagewater(){ //http://www.hzhuti.com 加圖片水印功能 //用函數(shù)獲取水印文件的長(zhǎng)和寬 $imagearrs=$this->getimagearr($this->value1); //調(diào)用函數(shù)計(jì)算出水印加載的位置 $positionarr=$this->position($this->value2, $imagearrs[0], $imagearrs[1]); //加水印 imagecopy($this->image, $this->imagesources($this->value1), $positionarr[0], $positionarr[1], 0, 0, $imagearrs[0], $imagearrs[1]); //調(diào)用輸出方法保存 $this->output($this->image); } private function clipping(){ //圖片裁剪功能 //將傳進(jìn)來的值分別賦給變量 list($src_x, $src_y)=explode(",", $this->value1); list($dst_w, $dst_h)=explode(",", $this->value2); if($this->width < $src_x+$dst_w || $this->height < $src_y+$dst_h){ //這個(gè)判斷就是限制不能截取到圖片外面去 return false; } //創(chuàng)建新的畫布資源 $newimg=imagecreatetruecolor($dst_w, $dst_h); //進(jìn)行裁剪 imagecopyresampled($newimg, $this->image, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $dst_w, $dst_h); //調(diào)用輸出方法保存 $this->output($newimg); } private function scaling(){ //圖片縮放功能 //獲取等比縮放的寬和高 $this-> proimagesize(); //根據(jù)參數(shù)進(jìn)行縮放,并調(diào)用輸出函數(shù)保存處理后的文件 $this->output($this->imagescaling()); } private function imagesources($imgad){ //獲取圖片類型并打開圖像資源 $imagearray=$this->getimagearr($imgad); switch($imagearray[2]){ case 1://gif $this->imgtype=1; $img=imagecreatefromgif($imgad); break; case 2://jpeg $this->imgtype=2; $img=imagecreatefromjpeg($imgad); break; case 3://png $this->imgtype=3; $img=imagecreatefrompng($imgad); break; default: return false; } return $img; } private function imagesizex(){ //獲得圖片寬度 return imagesx($this->image); } private function imagesizey(){ //獲取圖片高度 return imagesy($this->image); } private function proimagesize(){ //計(jì)算等比縮放的圖片的寬和高 if($this->value1 && ($this->width < $this->height)) { //等比縮放算法 $this->value1=round(($this->value2/ $this->height)*$this->width); }else{ $this->value2=round(($this->value1/ $this->width) * $this->height); } } private function imagescaling(){//圖像縮放功能,返回處理后的圖像資源 $newimg=imagecreatetruecolor($this->value1, $this->value2); $tran=imagecolortransparent($this->image);//處理透明算法 if($tran >= 0 && $tran < imagecolorstotal($this->image)){ $tranarr=imagecolorsforindex($this->image, $tran); $newcolor=imagecolorallocate($newimg, $tranarr['red'], $tranarr['green'], $tranarr['blue']); imagefill($newimg, 0, 0, $newcolor); imagecolortransparent($newimg, $newcolor); } imagecopyresampled($newimg, $this->image, 0, 0, 0, 0, $this->value1, $this->value2, $this->width, $this->height); return $newimg; } private function output($image){//輸出圖像 switch($this->imgtype){ case 1: imagegif($image, $this->endaddress); break; case 2: imagejpeg($image, $this->endaddress); break; case 3: imagepng($image, $this->endaddress); break; default: return false; } } private function getimagearr($imagesou){//返回圖像屬性數(shù)組方法 return getimagesize($imagesou); } private function position($num, $width, $height){//根據(jù)傳入的數(shù)字返回一個(gè)位置的坐標(biāo),$width和$height分別代表插入圖像的寬和高 switch($num){ case 1: $positionarr[0]=0; $positionarr[1]=0; break; case 2: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=0; break; case 3: $positionarr[0]=$this->width-$width; $positionarr[1]=0; break; case 4: $positionarr[0]=0; $positionarr[1]=($this->height-$height)/2; break; case 5: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=($this->height-$height)/2; break; case 6: $positionarr[0]=$this->width-$width; $positionarr[1]=($this->height-$height)/2; break; case 7: $positionarr[0]=0; $positionarr[1]=$this->height-$height; break; case 8: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=$this->height-$height; break; case 9: $positionarr[0]=$this->width-$width; $positionarr[1]=$this->height-$height; break; case 0: $positionarr[0]=rand(0, $this->width-$width); $positionarr[1]=rand(0, $this->height-$height); break; } return $positionarr; } function __destruct(){ imagedestroy($this->image); } } ?>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)php程序設(shè)計(jì)有所幫助。
相關(guān)文章
php實(shí)現(xiàn)在服務(wù)器上創(chuàng)建目錄的方法
這篇文章主要介紹了php實(shí)現(xiàn)在服務(wù)器上創(chuàng)建目錄的方法,實(shí)例分析了php中使用mkdir函數(shù)的使用技巧,需要的朋友可以參考下2015-03-03PHP cookie,session的使用與用戶自動(dòng)登錄功能實(shí)現(xiàn)方法分析
這篇文章主要介紹了PHP cookie,session的使用與用戶自動(dòng)登錄功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了php使用cookie與session進(jìn)行數(shù)據(jù)存取以及實(shí)現(xiàn)自動(dòng)登陸功能的相關(guān)操作技巧,需要的朋友可以參考下2019-06-06php常用日期時(shí)間函數(shù)實(shí)例小結(jié)
這篇文章主要介紹了php常用日期時(shí)間函數(shù),結(jié)合實(shí)例形式總結(jié)分析了php日期時(shí)間相關(guān)的時(shí)間戳、格式化、時(shí)區(qū)獲取與設(shè)置、時(shí)間戳轉(zhuǎn)換與計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2019-07-07