PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > PHP教程 > 正文

    PHP图片缩放,裁切,加水印类库

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:该类只有一个公共方法,通过在实例化对象的时候给$type参数传不同的值,从而实现不同功能。 目前只实现了三个功能:1:图片缩放,2:图片...
    该类只有一个公共方法,通过在实例化对象的时候给$type参数传不同的值,从而实现不同功能。 目前只实现了三个功能:1:图片缩放,2:图片裁剪,3:加图片水印。

    在实例化中,通过给第二个参数传不同的值,从而实现不同的功能

    用法:

    1. <?php 
    2. include "image.class.php"
    3. $image=new image("2.png", 1, "300""500""5.png");   //使用图片缩放功能 
    4. $image=new image("2.png", 2, "0,0""50,50""5.png"); //使用图片裁剪功能 
    5. $image=new image("2.png", 3, "1.png""0""5.png");   //使用加图片水印功能 
    6. $image->outimage(); 
    7. ?> 

    代码:
     

    1. <?php 
    2. /*已知问题:1.在图片缩放功能中,使用imagecreatetruecolor函数创建画布,并使用透明处理算法,但PNG格式的图片无法透明。用imagecreate函数创建画布可以解决这个问题,但是缩放出来的图片色数太少了 
    3.  * 
    4.  * 
    5.  *type值: 
    6.  * (1):代表使用图片缩放功能,此时,$value1代表缩放后图片的宽度,$value2代表缩放后图片的高度 
    7.  * (2):代表使用图片裁剪功能,此时,$value1代表裁剪开始点的坐标,例:从原点开始即是“0,0”前面是x轴后面是y轴,中间用,分隔,$value2代表裁剪的宽度和高度,同样也是“20,20”的形式使用 
    8.  * (3):代表使用加图片水印功能,此时,$value1代表水印图片的文件名,$value2代表水印在图片中的位置,有10值个可以选,1代表左上,2代表左中,3代表左右,4代表中左,5代表中中,6代表中右,7代表下做,8代表下中,9代表下右,0代表随机位置 
    9.  *B5教程网www.bcty365.com
    10.  */ 
    11.  
    12. class image{ 
    13.     private $types;    //使用的功能编号,1为图片缩放功能  2为图片裁剪功能   3,为图片加图片水印功能 
    14.     private $imgtype;//图片的格式 
    15.     private $image;    //图片资源 
    16.     private $width;//图片宽度 
    17.     private $height;//图片高度 
    18.     private $value1;//根据所传type值的不同,$value1分别代表不同的值 
    19.     private $value2;//根据所传type值的不同,$value2分别代表不同的值 
    20.     private $endaddress;//输出后的地址+文件名 
    21.  
    22.     function __construct($imageaddress$types$value1=""$value2=""$endaddress){ 
    23.         $this->types=$types
    24.         $this->image=$this->imagesources($imageaddress); 
    25.         $this->width=$this->imagesizex(); 
    26.         $this->height=$this->imagesizey(); 
    27.         $this->value1=$value1
    28.         $this->value2=$value2
    29.         $this->endaddress=$endaddress
    30.     } 
    31.  
    32.     function outimage(){    //根据传入type值的不同,输出不同的功能 
    33.         switch($this->types){ 
    34.             case 1: 
    35.                 $this->scaling(); 
    36.                 break
    37.             case 2: 
    38.                 $this->clipping(); 
    39.                 break
    40.             case 3: 
    41.                 $this->imagewater(); 
    42.                 break
    43.             default
    44.                 return false; 
    45.  
    46.         } 
    47.     } 
    48.  
    49.     private function imagewater(){  //加图片水印功能 
    50.         //用函数获取水印文件的长和宽 
    51.         $imagearrs=$this->getimagearr($this->value1); 
    52.         //调用函数计算出水印加载的位置 
    53.         $positionarr=$this->position($this->value2, $imagearrs[0], $imagearrs[1]); 
    54.         //加水印 
    55.         imagecopy($this->image, $this->imagesources($this->value1), $positionarr[0], $positionarr[1], 0, 0, $imagearrs[0], $imagearrs[1]); 
    56.         //调用输出方法保存 
    57.         $this->output($this->image); 
    58.     } 
    59.  
    60.     private function clipping(){    //图片裁剪功能 
    61.         //将传进来的值分别赋给变量 
    62.         list($src_x$src_y)=explode(","$this->value1); 
    63.         list($dst_w$dst_h)=explode(","$this->value2); 
    64.         if($this->width < $src_x+$dst_w || $this->height < $src_y+$dst_h){    //这个判断就是限制不能截取到图片外面去 
    65.             return false; 
    66.         }        
    67.         //创建新的画布资源 
    68.         $newimg=imagecreatetruecolor($dst_w$dst_h); 
    69.         //进行裁剪 
    70.         imagecopyresampled($newimg$this->image, 0, 0, $src_x$src_y$dst_w$dst_h$dst_w$dst_h); 
    71.         //调用输出方法保存 
    72.         $this->output($newimg);            
    73.     } 
    74.  
    75.     private function scaling(){ //图片缩放功能 
    76.         //获取等比缩放的宽和高 
    77.         $this-> proimagesize(); 
    78.         //根据参数进行缩放,并调用输出函数保存处理后的文件 
    79.         $this->output($this->imagescaling()); 
    80.     } 
    81.  
    82.     private function imagesources($imgad){ //获取图片类型并打开图像资源 
    83.         $imagearray=$this->getimagearr($imgad); 
    84.         switch($imagearray[2]){ 
    85.             case 1://gif 
    86.                 $this->imgtype=1; 
    87.                 $img=imagecreatefromgif($imgad); 
    88.                 break
    89.             case 2://jpeg 
    90.                 $this->imgtype=2; 
    91.                 $img=imagecreatefromjpeg($imgad); 
    92.                 break
    93.             case 3://png 
    94.                 $this->imgtype=3; 
    95.                 $img=imagecreatefrompng($imgad); 
    96.                 break
    97.             default
    98.                 return false; 
    99.         } 
    100.         return $img
    101.     } 
    102.  
    103.     private function imagesizex(){  //获得图片宽度 
    104.         return imagesx($this->image); 
    105.     } 
    106.  
    107.     private function imagesizey(){  //获取图片高度 
    108.         return imagesy($this->image); 
    109.     } 
    110.  
    111.     private function proimagesize(){    //计算等比缩放的图片的宽和高 
    112.         if($this->value1 && ($this->width < $this->height)) {    //等比缩放算法 
    113.             $this->value1=round(($this->value2/ $this->height)*$this->width); 
    114.         }else
    115.             $this->value2=round(($this->value1/ $this->width) * $this->height); 
    116.         } 
    117.     } 
    118.  
    119.     private function imagescaling(){//图像缩放功能,返回处理后的图像资源 
    120.         $newimg=imagecreatetruecolor($this->value1, $this->value2); 
    121.         $tran=imagecolortransparent($this->image);//处理透明算法 
    122.         if($tran >= 0 && $tran < imagecolorstotal($this->image)){ 
    123.             $tranarr=imagecolorsforindex($this->image, $tran); 
    124.             $newcolor=imagecolorallocate($newimg$tranarr['red'], $tranarr['green'], $tranarr['blue']); 
    125.             imagefill($newimg, 0, 0, $newcolor); 
    126.             imagecolortransparent($newimg$newcolor); 
    127.         } 
    128.         imagecopyresampled($newimg$this->image, 0, 0, 0, 0, $this->value1, $this->value2, $this->width, $this->height); 
    129.         return $newimg
    130.     } 
    131.  
    132.     private function output($image){//输出图像 
    133.         switch($this->imgtype){ 
    134.             case 1: 
    135.                 imagegif($image$this->endaddress); 
    136.                 break
    137.             case 2: 
    138.                 imagejpeg($image$this->endaddress); 
    139.                 break
    140.             case 3: 
    141.                 imagepng($image$this->endaddress); 
    142.                 break
    143.             default
    144.                 return false; 
    145.         } 
    146.     } 
    147.  
    148.     private function getimagearr($imagesou){//返回图像属性数组方法 
    149.         return getimagesize($imagesou); 
    150.     } 
    151.  
    152.     private function position($num$width$height){//根据传入的数字返回一个位置的坐标,$width和$height分别代表插入图像的宽和高 
    153.         switch($num){ 
    154.             case 1: 
    155.                 $positionarr[0]=0; 
    156.                 $positionarr[1]=0; 
    157.                 break
    158.             case 2: 
    159.                 $positionarr[0]=($this->width-$width)/2; 
    160.                 $positionarr[1]=0; 
    161.                 break
    162.             case 3: 
    163.                 $positionarr[0]=$this->width-$width
    164.                 $positionarr[1]=0; 
    165.                 break
    166.             case 4: 
    167.                 $positionarr[0]=0; 
    168.                 $positionarr[1]=($this->height-$height)/2; 
    169.                 break
    170.             case 5: 
    171.                 $positionarr[0]=($this->width-$width)/2; 
    172.                 $positionarr[1]=($this->height-$height)/2; 
    173.                 break
    174.             case 6: 
    175.                 $positionarr[0]=$this->width-$width
    176.                 $positionarr[1]=($this->height-$height)/2; 
    177.                 break
    178.             case 7: 
    179.                 $positionarr[0]=0; 
    180.                 $positionarr[1]=$this->height-$height
    181.                 break
    182.             case 8: 
    183.                 $positionarr[0]=($this->width-$width)/2; 
    184.                 $positionarr[1]=$this->height-$height
    185.                 break
    186.             case 9: 
    187.                 $positionarr[0]=$this->width-$width
    188.                 $positionarr[1]=$this->height-$height
    189.                 break
    190.             case 0: 
    191.                 $positionarr[0]=rand(0, $this->width-$width); 
    192.                 $positionarr[1]=rand(0, $this->height-$height); 
    193.                 break
    194.         } 
    195.         return $positionarr
    196.     } 
    197.  
    198.     function __destruct(){ 
    199.         imagedestroy($this->image); 
    200.     } 
    201.  
    202. ?> 

     

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-10-3364-1.html
    相关热词搜索: