当前位置:首页 > PHP教程 > php类库 > 列表

分享php多功能图片处理类

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-05 11:03:47 浏览: 评论:0 

这篇文章主要为大家分享php多功能图片处理类,方便大家进行学习研究,感兴趣的小伙伴们可以参考一下,本文实例为大家分享了多功能php图片处理类,供大家参考,具体内容如下:

  1. <?php  
  2. /**  
  3.  * Image.class.php 图像处理类  
  4.  * @author Administrator  
  5.  *  
  6.  */ 
  7. class Image{  
  8.      
  9.   private $path='';  
  10.   /**  
  11.    * 构造方法  
  12.    * @param unknown $path  
  13.    */ 
  14.   function __construct($path=''){  
  15.     if (!emptyempty($path)) {  
  16.       $this->path=$path;  
  17.     }  
  18.   }  
  19.   /**  
  20.    +-----------------------------------------------  
  21.    * 等比缩放函数  
  22.    +-----------------------------------------------  
  23.    * @param unknown $name 需处理图片的名称  
  24.    * @param unknown $width 缩放后的宽度  
  25.    * @param unknown $height 缩放后的高度  
  26.    * @param string $thumb_prixs 缩放后的前缀名  
  27.    * @return mixed $newname 返回的缩放后的文件名  
  28.    */ 
  29.   function thumb($name,$width,$height,$thumb_prixs='th_'){  
  30.     //获取图片信息  
  31.     $Info=$this->ImageInfo($name); //图片的宽度,高度,类型  
  32.     //获取图片资源,各种类型的图片都可以创建资源,jpg,gif,png  
  33.     $imagres=$this->Img_resouce($name$Info);  
  34.     //获取计算图片等比例之后的大小,  
  35.     $size=$this->getNewSize($name,$width,$height,$Info);  
  36.     //获取新的图片资源,处理透明背景  
  37.     $newimg=$this->getImage($imagres,$size,$Info);  
  38.     //另存为一个新的图片,返回新的缩放后的图片名称  
  39.     $newname=$this->SaveNewImage($newimg,$thumb_prixs.$name,$Info);  
  40.     return $newname;   
  41.   }  
  42.      
  43.   /**  
  44.    +-----------------------------------------------------------------------  
  45.    * 水印标记函数  
  46.    +-----------------------------------------------------------------------  
  47.    * @param unknown $backname  背景文件名  
  48.    * @param unknown $watername 水印文件名  
  49.    * @param number $waterpos  水印位置  
  50.    * @param string $wa_prixs  水印前缀名  
  51.    * @return boolean  
  52.    */ 
  53.   function waterMark($backname,$watername,$waterpos=0,$wa_prixs='wa_') {  
  54.        
  55.     if (file_exists($this->path.$backname) && file_exists($this->path.$watername)) {  
  56.          
  57.       $backinfo=$this->ImageInfo($backname);  
  58.          
  59.       $waterinfo=$this->ImageInfo($watername);  
  60.          
  61.       if(!$pos=$this->getPos($backinfo$waterinfo$waterpos)){  
  62.         echo "水印图片不应该比背景图片小";  
  63.         return false;  
  64.       }  
  65.        $backimg=$this->Img_resouce($backname$backinfo);  
  66.           
  67.        $waterimg=$this->Img_resouce($watername$waterinfo);  
  68.        var_dump($backimg);exit();  
  69.        $backimg=$this->CopyImage($backimg$waterimg$pos$waterinfo);  
  70.           
  71.        $this->SaveNewImage($backimg$wa_prixs.$backname$backinfo);  
  72.     }else{  
  73.          
  74.       echo "图片或水印不存在";  
  75.       return false;  
  76.     }  
  77.   }  
  78.   /**  
  79.    +-----------------------------------------------------------------------  
  80.    * 获取图片信息函数  
  81.    +-----------------------------------------------------------------------  
  82.    * @param unknown $name  
  83.    * @return unknown  
  84.    */ 
  85.      
  86.    private function ImageInfo($img) {  
  87.     $imageInfo=getimagesize($img);  
  88.     if ($imageInfo!==false) {  
  89.       $imageType=strtolower(substr(image_type_to_extension($imageInfo[2]),1));  
  90.       $imageSize=filesize($img);  
  91.       $Info=array(  
  92.         "width" => $imageInfo[0],  
  93.         "height" => $imageInfo[1],  
  94.         "type" => $imageType,  
  95.         "size" => $imageSize,  
  96.         "mime" => $imageInfo['mime']  
  97.       );  
  98.       return $Info;  
  99.     }else{  
  100.       return false;  
  101.     }    
  102.   }  
  103.      
  104.      
  105.   /**  
  106.    +--------------------------------------------------------  
  107.    * 创建原图像格式函数  
  108.    +--------------------------------------------------------  
  109.    * @param unknown $name  
  110.    * @param unknown $imaginfo  
  111.    * @return boolean|resource  
  112.    */ 
  113.   private function Img_resouce($name,$imageinfo){  
  114.     $iamgeres=$this->path.$name;  
  115.     //var_dump($iamgeres);exit();  
  116.      switch ($imageinfo['type']) {  
  117.       case 'gif':  
  118.        $img=imagecreatefromgif($name);  
  119.          break;  
  120.       case 'jpg':  
  121.        $img=imagecreatefromjpeg($name);  
  122.          break;  
  123.       case 'png':  
  124.        $img=imagecreatefrompng($name);  
  125.          break;              
  126.      }  
  127.      return $img;  
  128.   }  
  129.   /**  
  130.    +--------------------------------------------------  
  131.    * 获取等比缩放尺寸函数  
  132.    +--------------------------------------------------  
  133.    * @param unknown $name  
  134.    * @param unknown $width  
  135.    * @param unknown $height  
  136.    * @param unknown $imaginfo  
  137.    * @return Ambigous <unknown, number>  
  138.    */ 
  139.   private function getNewSize($name,$width,$height,$imaginfo){  
  140.        $size['width']=$imaginfo['width'];  
  141.        $size['height']=$imaginfo['height'];  
  142.     if ($width<$imaginfo['width']) {  
  143.       $size['width']=$width;  
  144.     }  
  145.     if ($height<$imaginfo['height']) {  
  146.       $size['height']=$height;  
  147.     }  
  148.     //图像等比例缩放算法  
  149.     if ($imaginfo['width']*$size['width']>$imaginfo['height']*$size['height']) {  
  150.       $size['height']=round($imaginfo['height']*$size['width']/$imaginfo['width']);  
  151.     }else{  
  152.       $size['width']=round($imaginfo['width']*$size['height']/$imaginfo['height']);  
  153.     }  
  154.     return $size;   
  155.   }  
  156.   private function getImage($imageres,$size,$imageinfo){  
  157.     //新建一个真彩色图像  
  158.     $newimg=imagecreatetruecolor($size['width'], $size['height']);  
  159.     //将某个颜色定义为透明色  
  160.     $otsc=imagecolortransparent($imageres);  
  161.     //获取图像的调色板的颜色数目  
  162.     if ($otsc>=0&&$otsc<=imagecolorstotal($imageres)) {  
  163.       //取得某索引的颜色  
  164.       $stran=imagecolorsforindex($imageres$otsc);  
  165.       //为图像分配颜色  
  166.       $newt=imagecolorallocate($imageres$stran['red'], $stran['green'], $stran['blue']);  
  167.       //区域填充函数  
  168.       imagefill($newimg, 0, 0, $newt);  
  169.       //为图像定义透明色  
  170.       imagecolortransparent($newimg,$newt);      
  171.     }  
  172.     imagecopyresized($newimg$imageres, 0, 0, 0, 0, $size['width'], $size['height'], $imageinfo['width'], $imageinfo['height']);    
  173.        
  174.     imagedestroy($imageres);  
  175.        
  176.     return $newimg;   
  177.    }  
  178.    /**  
  179.     +----------------------------------------------  
  180.     *保存图像函数  
  181.     +----------------------------------------------  
  182.     * @param unknown $newimg  
  183.     * @param unknown $newname  
  184.     * @param unknown $imageinfo  
  185.     * @return unknown   
  186.     */ 
  187.    private function SaveNewImage($newimg,$newname,$imageinfo){  
  188.     switch ($imageinfo['type']){  
  189.       case 1://gif  
  190.         $result=imagegif($newimg,$this->path.$newname);  
  191.         break;  
  192.       case 2://jpg  
  193.         $result=imagejpeg($newimg,$this->path.$newname);  
  194.         break;  
  195.       case 3://png  
  196.         $result=imagepng($newimg,$this->path.$newname);  
  197.         break;  
  198.     }  
  199.     imagedestroy($newimg);  
  200.     return $newname;  
  201.    }  
  202.       
  203.    /**  
  204.     +-----------------------------------------------------------------  
  205.     * 获取水印位置函数  
  206.     +-----------------------------------------------------------------  
  207.     * @param unknown $backinfo  背景信息  
  208.     * @param unknown $waterinfo  水印信息  
  209.     * @param unknown $waterpos  水印位置  
  210.     * @return boolean|multitype:number 返回坐标数组  
  211.     */ 
  212.    private function getPos($backinfo,$waterinfo,$waterpos) {  
  213.        
  214.     if ($backinfo['width']<$waterinfo['width']||$backinfo['height']<$waterinfo['height']) {  
  215.       return false;  
  216.     }  
  217.     switch ($waterpos) {  
  218.          
  219.       case 1://左上角  
  220.         $posX=0;  
  221.         $posY=0;  
  222.          break;  
  223.       case 2://中上方  
  224.         $posX=$backinfo['width']-$waterinfo['width']/2;  
  225.         $posY=0;  
  226.          break;  
  227.       case 3://右上角  
  228.         $posX=$backinfo['width']-$waterinfo['width'];  
  229.         $posY=0;  
  230.          break;  
  231.       case 4://左中方  
  232.         $posX=0;  
  233.         $posY=$backinfo['height']-$waterinfo['height']/2;  
  234.          break;  
  235.       case 5://正中间  
  236.         $posX=$backinfo['width']-$waterinfo['width']/2;  
  237.         $posY=$backinfo['height']-$waterinfo['height']/2;  
  238.          break;  
  239.       case 6://右中方  
  240.         $posX=$backinfo['width']-$waterinfo['width'];  
  241.         $posY=$backinfo['height']-$waterinfo['height']/2;  
  242.          break;  
  243.       case 7://底部靠左  
  244.         $posX=0;  
  245.         $posY=$backinfo['height']-$waterinfo['height'];  
  246.          break;  
  247.       case 8://底部居中  
  248.         $posX=$backinfo['width']-$waterinfo['width']/2;  
  249.         $posY=$backinfo['height']-$waterinfo['height'];  
  250.          break;  
  251.       case 9://底部靠右  
  252.         $posX=$backinfo['width']-$waterinfo['width'];  
  253.         $posY=$backinfo['height']-$waterinfo['height'];  
  254.          break;  
  255.       case 0:  
  256.       default :  
  257.         $posX=rand(0,$backinfo['width']-$waterinfo['width']);  
  258.         $posY=rand(0,$backinfo['height']-$waterinfo['height']);  
  259.          break;  
  260.     }  
  261.     return array('posX'=>$posX,'posY'=>$posY);  
  262.    }  
  263.    /**  
  264.     +-------------------------------------------------------------------  
  265.     * 拷贝图像  
  266.     +-------------------------------------------------------------------  
  267.     * @param unknown $backimg   背景资源  
  268.     * @param unknown $waterimg  水印资源  
  269.     * @param unknown $pos     水印位置  
  270.     * @param unknown $waterinfo  水印信息  
  271.     * @return unknown  
  272.     */ 
  273.    private function CopyImage($backimg,$waterimg,$pos,$waterinfo) {  
  274.         
  275.     imagecopy($backimg$waterimg$pos['posX'], $pos['posY'], 0, 0, $waterinfo['width'], $waterinfo['height']);  
  276.     imagedestroy($waterimg);      
  277.      return $backimg;  
  278.    }  
  279.        
  280. }  
  281. ?> 

以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助。

Tags: php多功能图片处理类

分享到: