分享php多功能图片处理类

所属分类: 网络编程 / PHP编程 阅读数: 1542
收藏 0 赞 0 分享

本文实例为大家分享了多功能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 addslashes和mysql_real_escape_string

本文介绍的是用 mysql_real_escape_string对用户提交数据进行整理处理和通过addslashes以及mysql_escape_string这3个类似的功能函数的区别。经过转义的数据可以直接插入到数据库中。
收藏 0 赞 0 分享

php cout&lt;&lt;的一点看法

cout<<运算符后面如果是常整数,那么最大可以输出4294967295,即2^32-1,不允许出现负数,也就是说,cout<<运算符对于常整数只重载了unsigned int型;对于有小数的情况,则保留6位有效数字.
收藏 0 赞 0 分享

PHP 变量的定义方法

在网页中使用变量的几点注意事项小结。
收藏 0 赞 0 分享

php学习之 认清变量的作用范围

变量的存在有着它的生命周期,我们可以让它存在于一个小的函数内部,也可让它存在于整个程序当中。对于一般情况下声明的变量,我们称之为局部变量,只能在当前程序段中存在,而使用$globals声明出来的变量则是在当前页面整个程序当中都会有效。
收藏 0 赞 0 分享

php 静态变量与自定义常量的使用方法

php 静态变量与自定义常量的使用方法
收藏 0 赞 0 分享

认识并使用PHP超级全局变量

超级全局变量也叫做预定义变量,是PHP系统中自带的变量,它可让你的程序设计更加的方便快捷。
收藏 0 赞 0 分享

通过具体程序来理解PHP里面的抽象类

面向对象程序通过类的分层结构构建起来. 在单重继承语言如PHP中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类.
收藏 0 赞 0 分享

php读取xml实例代码

php读取xml实例代码,需要的朋友可以参考下。
收藏 0 赞 0 分享

php 正确解码javascript中通过escape编码后的字符

js的escape如何在PHP中来解呢?下面的这个函数可以正确的解析,网上有不少unescape的函数,但好用的不多.
收藏 0 赞 0 分享

在PHP中养成7个面向对象的好习惯

在 PHP 编程早期,PHP 代码在本质上是限于面向过程的。过程代码 的特征在于使用过程构建应用程序块。过程通过允许过程之间的调用提供某种程度的重用。
收藏 0 赞 0 分享
查看更多