分享php多功能图片处理类

5年以前  |  阅读数:1044 次  |  编程语言:PHP 

本文实例为大家分享了多功能php图片处理类,供大家参考,具体内容如下


    <?php 
    /** 
     * Image.class.php 图像处理类 
     * @author Administrator 
     * 
     */ 
    class Image{ 

      private $path=''; 
      /** 
       * 构造方法 
       * @param unknown $path 
       */ 
      function __construct($path=''){ 
        if (!empty($path)) { 
          $this->path=$path; 
        } 
      } 
      /** 
       +----------------------------------------------- 
       * 等比缩放函数 
       +----------------------------------------------- 
       * @param unknown $name 需处理图片的名称 
       * @param unknown $width 缩放后的宽度 
       * @param unknown $height 缩放后的高度 
       * @param string $thumb_prixs 缩放后的前缀名 
       * @return mixed $newname 返回的缩放后的文件名 
       */ 
      function thumb($name,$width,$height,$thumb_prixs='th_'){ 
        //获取图片信息 
        $Info=$this->ImageInfo($name); //图片的宽度,高度,类型 
        //获取图片资源,各种类型的图片都可以创建资源,jpg,gif,png 
        $imagres=$this->Img_resouce($name, $Info); 
        //获取计算图片等比例之后的大小, 
        $size=$this->getNewSize($name,$width,$height,$Info); 
        //获取新的图片资源,处理透明背景 
        $newimg=$this->getImage($imagres,$size,$Info); 
        //另存为一个新的图片,返回新的缩放后的图片名称 
        $newname=$this->SaveNewImage($newimg,$thumb_prixs.$name,$Info); 
        return $newname;  
      } 

      /** 
       +----------------------------------------------------------------------- 
       * 水印标记函数 
       +----------------------------------------------------------------------- 
       * @param unknown $backname  背景文件名 
       * @param unknown $watername 水印文件名 
       * @param number $waterpos  水印位置 
       * @param string $wa_prixs  水印前缀名 
       * @return boolean 
       */ 
      function waterMark($backname,$watername,$waterpos=0,$wa_prixs='wa_') { 

        if (file_exists($this->path.$backname) && file_exists($this->path.$watername)) { 

          $backinfo=$this->ImageInfo($backname); 

          $waterinfo=$this->ImageInfo($watername); 

          if(!$pos=$this->getPos($backinfo, $waterinfo, $waterpos)){ 
            echo "水印图片不应该比背景图片小"; 
            return false; 
          } 
           $backimg=$this->Img_resouce($backname, $backinfo); 

           $waterimg=$this->Img_resouce($watername, $waterinfo); 
           var_dump($backimg);exit(); 
           $backimg=$this->CopyImage($backimg, $waterimg, $pos, $waterinfo); 

           $this->SaveNewImage($backimg, $wa_prixs.$backname, $backinfo); 
        }else{ 

          echo "图片或水印不存在"; 
          return false; 
        } 
      } 
      /** 
       +----------------------------------------------------------------------- 
       * 获取图片信息函数 
       +----------------------------------------------------------------------- 
       * @param unknown $name 
       * @return unknown 
       */ 

       private function ImageInfo($img) { 
        $imageInfo=getimagesize($img); 
        if ($imageInfo!==false) { 
          $imageType=strtolower(substr(image_type_to_extension($imageInfo[2]),1)); 
          $imageSize=filesize($img); 
          $Info=array( 
            "width" => $imageInfo[0], 
            "height" => $imageInfo[1], 
            "type" => $imageType, 
            "size" => $imageSize, 
            "mime" => $imageInfo['mime'] 
          ); 
          return $Info; 
        }else{ 
          return false; 
        }   
      } 


      /** 
       +-------------------------------------------------------- 
       * 创建原图像格式函数 
       +-------------------------------------------------------- 
       * @param unknown $name 
       * @param unknown $imaginfo 
       * @return boolean|resource 
       */ 
      private function Img_resouce($name,$imageinfo){ 
        $iamgeres=$this->path.$name; 
        //var_dump($iamgeres);exit(); 
         switch ($imageinfo['type']) { 
          case 'gif': 
           $img=imagecreatefromgif($name); 
             break; 
          case 'jpg': 
           $img=imagecreatefromjpeg($name); 
             break; 
          case 'png': 
           $img=imagecreatefrompng($name); 
             break;             
         } 
         return $img; 
      } 
      /** 
       +-------------------------------------------------- 
       * 获取等比缩放尺寸函数 
       +-------------------------------------------------- 
       * @param unknown $name 
       * @param unknown $width 
       * @param unknown $height 
       * @param unknown $imaginfo 
       * @return Ambigous <unknown, number> 
       */ 
      private function getNewSize($name,$width,$height,$imaginfo){ 
           $size['width']=$imaginfo['width']; 
           $size['height']=$imaginfo['height']; 
        if ($width<$imaginfo['width']) { 
          $size['width']=$width; 
        } 
        if ($height<$imaginfo['height']) { 
          $size['height']=$height; 
        } 
        //图像等比例缩放算法 
        if ($imaginfo['width']*$size['width']>$imaginfo['height']*$size['height']) { 
          $size['height']=round($imaginfo['height']*$size['width']/$imaginfo['width']); 
        }else{ 
          $size['width']=round($imaginfo['width']*$size['height']/$imaginfo['height']); 
        } 
        return $size;  
      } 
      private function getImage($imageres,$size,$imageinfo){ 
        //新建一个真彩色图像 
        $newimg=imagecreatetruecolor($size['width'], $size['height']); 
        //将某个颜色定义为透明色 
        $otsc=imagecolortransparent($imageres); 
        //获取图像的调色板的颜色数目 
        if ($otsc>=0&&$otsc<=imagecolorstotal($imageres)) { 
          //取得某索引的颜色 
          $stran=imagecolorsforindex($imageres, $otsc); 
          //为图像分配颜色 
          $newt=imagecolorallocate($imageres, $stran['red'], $stran['green'], $stran['blue']); 
          //区域填充函数 
          imagefill($newimg, 0, 0, $newt); 
          //为图像定义透明色 
          imagecolortransparent($newimg,$newt);     
        } 
        imagecopyresized($newimg, $imageres, 0, 0, 0, 0, $size['width'], $size['height'], $imageinfo['width'], $imageinfo['height']);   

        imagedestroy($imageres); 

        return $newimg;  
       } 
       /** 
        +---------------------------------------------- 
        *保存图像函数 
        +---------------------------------------------- 
        * @param unknown $newimg 
        * @param unknown $newname 
        * @param unknown $imageinfo 
        * @return unknown  
        */ 
       private function SaveNewImage($newimg,$newname,$imageinfo){ 
        switch ($imageinfo['type']){ 
          case 1://gif 
            $result=imagegif($newimg,$this->path.$newname); 
            break; 
          case 2://jpg 
            $result=imagejpeg($newimg,$this->path.$newname); 
            break; 
          case 3://png 
            $result=imagepng($newimg,$this->path.$newname); 
            break; 
        } 
        imagedestroy($newimg); 
        return $newname; 
       } 

       /** 
        +----------------------------------------------------------------- 
        * 获取水印位置函数 
        +----------------------------------------------------------------- 
        * @param unknown $backinfo  背景信息 
        * @param unknown $waterinfo  水印信息 
        * @param unknown $waterpos  水印位置 
        * @return boolean|multitype:number 返回坐标数组 
        */ 
       private function getPos($backinfo,$waterinfo,$waterpos) { 

        if ($backinfo['width']<$waterinfo['width']||$backinfo['height']<$waterinfo['height']) { 
          return false; 
        } 
        switch ($waterpos) { 

          case 1://左上角 
            $posX=0; 
            $posY=0; 
             break; 
          case 2://中上方 
            $posX=$backinfo['width']-$waterinfo['width']/2; 
            $posY=0; 
             break; 
          case 3://右上角 
            $posX=$backinfo['width']-$waterinfo['width']; 
            $posY=0; 
             break; 
          case 4://左中方 
            $posX=0; 
            $posY=$backinfo['height']-$waterinfo['height']/2; 
             break; 
          case 5://正中间 
            $posX=$backinfo['width']-$waterinfo['width']/2; 
            $posY=$backinfo['height']-$waterinfo['height']/2; 
             break; 
          case 6://右中方 
            $posX=$backinfo['width']-$waterinfo['width']; 
            $posY=$backinfo['height']-$waterinfo['height']/2; 
             break; 
          case 7://底部靠左 
            $posX=0; 
            $posY=$backinfo['height']-$waterinfo['height']; 
             break; 
          case 8://底部居中 
            $posX=$backinfo['width']-$waterinfo['width']/2; 
            $posY=$backinfo['height']-$waterinfo['height']; 
             break; 
          case 9://底部靠右 
            $posX=$backinfo['width']-$waterinfo['width']; 
            $posY=$backinfo['height']-$waterinfo['height']; 
             break; 
          case 0: 
          default : 
            $posX=rand(0,$backinfo['width']-$waterinfo['width']); 
            $posY=rand(0,$backinfo['height']-$waterinfo['height']); 
             break; 
        } 
        return array('posX'=>$posX,'posY'=>$posY); 
       } 
       /** 
        +------------------------------------------------------------------- 
        * 拷贝图像 
        +------------------------------------------------------------------- 
        * @param unknown $backimg   背景资源 
        * @param unknown $waterimg  水印资源 
        * @param unknown $pos     水印位置 
        * @param unknown $waterinfo  水印信息 
        * @return unknown 
        */ 
       private function CopyImage($backimg,$waterimg,$pos,$waterinfo) { 

        imagecopy($backimg, $waterimg, $pos['posX'], $pos['posY'], 0, 0, $waterinfo['width'], $waterinfo['height']); 
        imagedestroy($waterimg);     
         return $backimg; 
       } 

    } 
    ?> 

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

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例