分享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程序设计有所帮助。

(0)

相关推荐

  • php多功能图片处理类分享(php图片缩放类)

    复制代码 代码如下: <?php    /**   *  基本图片处理,用于完成图片缩入,水印添加   *  当水印图超过目标图片尺寸时,水印图能自动适应目标图片而缩小   *  水印图可以设置跟背景的合并度  */ /*   使用方法:       自动裁切:       程序会按照图片的尺寸从中部裁切最大的正方形,并按目标尺寸进行缩略 $t--->setSrcImg("img/test.jpg");       $t->setCutType(1);//这一句就OK

  • PHP图片处理之使用imagecopy函数添加图片水印实例

    为图片添加水印也是图片处理中常见的功能.因为只要在页面中见到的图片都可以很轻松地拿到,你辛辛苦苦编辑的图片不想被别人不费吹灰之力拿走就用,所以为图片添加水印以确定版权,防止图片被盗用.制作水印可以使用文字(公司名称加网址),也可以使用图片(公司LOGO),图片水印效果更好一些,因为可以通过一些做图片软件进行美化.使用文字做水印,只需要在图片上画一些文字即可.如果制作图片水印,就需要先了解一下GD库中的imagecopy()函数,能复制图片的一部分.该函数的原型如下所示: 复制代码 代码如下: b

  • PHP图片处理之图片背景、画布操作

    像验证码或根据动态数据生成统计图标,以及前面介绍的一些GD库操作等都属于动态绘制图像.而在web开发中,也会经常去处理服务器中已存在的图片.例如,根据一些需求对图片进行缩放.加水印.裁剪.翻转和旋转等改图的操作.在web应用中,经常使用的图片格式有GIF.JPEG和PNG中的一种或几种,当然GD库也可以处理其他格式的图片,但都很少用到.所以安装GD库时,至少安装GIF.JPEG或PNG三种格式中的一种. 在前面介绍的画布管理中,使用imagecreate()和imageCreateTrueCol

  • PHP图片处理之使用imagecopyresampled函数实现图片缩放例子

    网站优化不能只定在代码上,内容也是网站最需要优化的对象之一,而图像又是网站中最主要的内容.图像的优化最需要处理的就是将所有上传到网站中的大图片自动缩放称小图(在网页中大小够用就行),以减少N倍的存储空间,并提高下载浏览的速度.所以图片缩放成一个动态网站必须要处理的任务,经常和文件上传绑定在一起工作,能在上传图片的同时就调整其大小.当然有时也需要单独处理图片缩放,例如在做图片列表时,如果直接用大图而在显示时才将其缩放成小图,这样做不仅下载速度会变慢,也会降低页面响应时间.通常遇到这样的应用都是在上

  • PHP图片处理之图片旋转和图片翻转实例

    图片的旋转和翻转也是Web项目中比较常见的功能,但这是两个不同的概念,图片的旋转是按特定的角度来转动图片,而图片的翻转则是将图片的内容按特定的方向对调.图片翻转需要自己编写函数来实现,而旋转图片则可以直接借助GD库中提供的imagerotate()函数完成.该函数的原型如下所示: 复制代码 代码如下: resource  imagerotate(resource src_im ,    float angle,    int bgd_color    [,int ignore_transpatr

  • php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)

    废话不说了,贴代码: 复制代码 代码如下: <?php /************************************ //函数: watermark($bigimg, $smallimg, $coord = 1) //作用: 添加水印 //参数: $bigimg 必选.大图片--要加上水印的图片 $smallimg 必选.小图片 $coord 可选.水印在大图中的位置, 1 左上角: 2 右上角: 3 右下角: 4 左下角: 5 中间 //示例: watermark('datu.p

  • PHP图片处理之使用imagecopyresampled函数裁剪图片例子

    图片裁剪是指在一个大的背景图片中裁剪出一张指定区域的图片,常见的应用是在用户设置个人头像时,可以从上传的图片中,裁剪出一个合适的区域作为自己的个人头像图片.图像裁剪和图片缩放的相似,所以也是借助imagecopyresampled()函数去实现这个功能.同样也是以JPEG图片格式为例,声明一个图像裁剪函数cut(),代码如下所示: 复制代码 代码如下: <?php     //在一个大的背景图片中裁剪出指定区域的图片,以jpeg图片格式为例     function cut($filename,

  • PHP图片处理类 phpThumb参数用法介绍

    phpThumb几个基本参数 一些有用的参数列一下: src:目标图片的地址 w:输出图片的宽度 h:输出图片的高度(如果不指定他将按w参数等比缩放) q:输出如果是JPG格式的,可以规定它的输出质量 bg:输出时的背景(如果需要) sw.sh.sx.sy:局部输出,宽高.起始位置 f:输出格式,可以为jpeg.png.gif.ico sfn:输出gif动画中的某一帧 fltr[]:滤镜,可以有很多效果,包括锐化.模糊.旋翻转.水印.边框.遮照.色彩调整等 更多效果可以参看官方例程: http:

  • Ajax+PHP边学边练 之五 图片处理

    先上个效果图:  Sample6_1.php 中创建Form: 复制代码 代码如下: //显示上传状态和图片 <div id="showimg"></div> //上传文件需要定义enctype,为了显示图片将target设为uploadframe <form id="uploadform" action="process_upload.php" method="post" enctype=&qu

  • PHPThumb图片处理实例

    下载地址(github.com/masterexploder/PHPThumb).注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意.在网站建设过程中,需要处理图片的地方多不胜数,用PHP的图片函数处理图片,十分繁琐.而且对新手来讲十分不好掌握.现在我们可以用PHPThumb类库来处理图片,包括,图片尺寸调整,图片截取,图片加水印,图片旋转等等功能. 使用演示: 复制代码 代码如下: //加载类库文件require_once 'path/to/ThumbLi

随机推荐