分享php多功能图片处理类

 更新时间:2016年05月15日 10:15:34   作者:LoeYueng  
这篇文章主要为大家分享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程序设计有所帮助。

相关文章

  • 浅谈ThinkPHP的URL重写

    浅谈ThinkPHP的URL重写

    关于ThinkPHP的URL重写,其核心点基本上都是去掉URL路径中的index.php,其余的内容和普通的伪静态没有什么区别了。
    2014-11-11
  • 浅析PHP如何并行异步处理HTTP请求

    浅析PHP如何并行异步处理HTTP请求

    在 PHP 中,由于其传统的同步阻塞模型,实现并行异步处理 HTTP 请求并不像其他语言那样直接,但也可以通过一些扩展和工具来实现,下面小编就来讲讲具体实现方法吧
    2025-02-02
  • PHP大文件及断点续传下载实现代码

    PHP大文件及断点续传下载实现代码

    这篇文章主要介绍了PHP大文件及断点续传下载实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • php批量删除数据

    php批量删除数据

    php批量删除数据...
    2007-01-01
  • php实现斐波那契数列的简单写法

    php实现斐波那契数列的简单写法

    这篇文章主要介绍了php实现斐波那契数列的简单写法,需要的朋友可以参考下
    2014-07-07
  • php下实现一个阿拉伯数字转中文数字的函数

    php下实现一个阿拉伯数字转中文数字的函数

    最近因需要,写了个“阿拉伯数字转中文数字的函数”。搜索了精华区只见到一个类似的。 感觉到我的算法不错,所以贴出来共享一下
    2008-07-07
  • 二招解决php乱码问题

    二招解决php乱码问题

    PHP的乱码问题已经说了N+1遍了,但还是经常看到新手不知道该如何解决php乱码问题,在此本人再重新给总结一下,希望对新手有点帮助
    2012-03-03
  • php实现签到功能的方法实例分析

    php实现签到功能的方法实例分析

    这篇文章主要介绍了php实现签到功能的方法,结合实例形式分析了php基于数据库及时间判断操作实现签到功能的相关技巧,需要的朋友可以参考下
    2017-12-12
  • PHP开发的微信现金红包功能示例

    PHP开发的微信现金红包功能示例

    这篇文章主要介绍了PHP开发的微信现金红包功能,结合实例形式较为详细的分析了php使用微信接口实现现金红包功能的相关步骤与操作技巧,需要的朋友可以参考下
    2017-06-06
  • PHP实现根据图片色界在不同位置加水印的方法

    PHP实现根据图片色界在不同位置加水印的方法

    这篇文章主要介绍了PHP实现根据图片色界在不同位置加水印的方法,涉及php使用MagickWand模块操作图片添加水印的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-08-08

最新评论