当前位置:首页 > PHP教程 > php图像处理 > 列表

功能强大的PHP图片处理类(水印、透明度、旋转)

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-20 17:24:51 浏览: 评论:0 

这篇文章主要汇总介绍了php图片处理类(水印、透明度、缩放、锐化),非常的简单实用,有需要的小伙伴可以参考下。

非常强大的php图片处理类,可以自定义图片水印、透明度、图片缩放、图片锐化、图片旋转、图片翻转、图片剪切、图片反色。

* 图片处理函数功能:缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色

* 处理并保存历史记录的思路:当有图片有改动时自动生成一张新图片,命名方式可以考虑在原图片的基础上加上步骤,例如:图片名称+__第几步

具体代码如下:

  1. <?php  
  2. class picture{  
  3.   var $PICTURE_URL//要处理的图片  
  4.    var $DEST_URL = "temp__01.jpg"//生成目标图片位置  
  5.    var $PICTURE_CREATE//要创建的图片  
  6.    var $TURE_COLOR//新建一个真彩图象  
  7.     
  8.     
  9.    var $PICTURE_WIDTH//原图片宽度  
  10.    var $PICTURE_HEIGHT//原图片高度  
  11.     
  12.     
  13.   /**  
  14.    * 水印的类型,默认的为水印文字  
  15.    */ 
  16.    var $MARK_TYPE = 1;  
  17.    var $WORD//经过UTF-8后的文字  
  18.    var $WORD_X//文字横坐标  
  19.    var $WORD_Y//文字纵坐标  
  20.    var $FONT_TYPE//字体类型  
  21.    var $FONT_SIZE = "12"//字体大小  
  22.    var $FONT_WORD//文字  
  23.    var $ANGLE = 0; //文字的角度,默认为0  
  24.    var $FONT_COLOR = "#000000"//文字颜色  
  25.    var $FONT_PATH = "font/simkai.ttf"//字体库,默认为宋体  
  26.    var $FORCE_URL//水印图片  
  27.    var $FORCE_X = 0; //水印横坐标  
  28.    var $FORCE_Y = 0; //水印纵坐标  
  29.    var $FORCE_START_X = 0; //切起水印的图片横坐标  
  30.    var $FORCE_START_Y = 0; //切起水印的图片纵坐标  
  31.     
  32.     
  33.    var $PICTURE_TYPE//图片类型  
  34.    var $PICTURE_MIME//输出的头部  
  35.     
  36.     
  37.   /**  
  38.    * 缩放比例为1的话就按缩放高度和宽度缩放  
  39.    */ 
  40.    var $ZOOM = 1; //缩放类型  
  41.    var $ZOOM_MULTIPLE//缩放比例  
  42.    var $ZOOM_WIDTH//缩放宽度  
  43.    var $ZOOM_HEIGHT//缩放高度  
  44.     
  45.     
  46.   /**  
  47.    * 裁切,按比例和固定长度、宽度  
  48.    */ 
  49.    var $CUT_TYPE = 1; //裁切类型  
  50.    var $CUT_X = 0; //裁切的横坐标  
  51.    var $CUT_Y = 0; //裁切的纵坐标  
  52.    var $CUT_WIDTH = 100; //裁切的宽度  
  53.    var $CUT_HEIGHT = 100; //裁切的高度  
  54.     
  55.     
  56.   /**  
  57.    * 锐化  
  58.    */ 
  59.    var $SHARP = "7.0"//锐化程度  
  60.     
  61.     
  62.   /**  
  63.    * 透明度处理  
  64.    */ 
  65.    var $ALPHA = '100'//透明度在0-127之间  
  66.    var $ALPHA_X = "90";  
  67.    var $ALPHA_Y = "50";  
  68.     
  69.   /**  
  70.    * 任意角度旋转  
  71.    */ 
  72.    var $CIRCUMROTATE = "90.0"//注意,必须为浮点数  
  73.     
  74.     
  75.   /**  
  76.    * 出错信息  
  77.    */ 
  78.    var $ERROR = array(  
  79.     'unalviable' => '没有找到相关图片!' 
  80.     );  
  81.     
  82.   /**  
  83.    * 构造函数:函数初始化  
  84.    */ 
  85.    function __construct($PICTURE_URL){  
  86.       
  87.      $this -> get_info($PICTURE_URL);  
  88.       
  89.      }  
  90.    function get_info($PICTURE_URL){  
  91.     /**  
  92.      * 处理原图片的信息,先检测图片是否存在,不存在则给出相应的信息  
  93.      */ 
  94.      @$SIZE = getimagesize($PICTURE_URL);  
  95.      if(!$SIZE){  
  96.        exit($this -> ERROR['unalviable']);  
  97.        }  
  98.       
  99.      // 得到原图片的信息类型、宽度、高度  
  100.     $this -> PICTURE_MIME = $SIZE['mime'];  
  101.      $this -> PICTURE_WIDTH = $SIZE[0];  
  102.      $this -> PICTURE_HEIGHT = $SIZE[1];  
  103.       
  104.      // 创建图片  
  105.     switch($SIZE[2]){  
  106.      case 1:  
  107.        $this -> PICTURE_CREATE = imagecreatefromgif($PICTURE_URL);  
  108.        $this -> PICTURE_TYPE = "imagejpeg";  
  109.        $this -> PICTURE_EXT = "jpg";  
  110.        break;  
  111.      case 2:  
  112.        $this -> PICTURE_CREATE = imagecreatefromjpeg($PICTURE_URL);  
  113.        $this -> PICTURE_TYPE = "imagegif";  
  114.        $this -> PICTURE_EXT = "gif";  
  115.        break;  
  116.      case 3:  
  117.        $this -> PICTURE_CREATE = imagecreatefrompng($PICTURE_URL);  
  118.        $this -> PICTURE_TYPE = "imagepng";  
  119.        $this -> PICTURE_EXT = "png";  
  120.        break;  
  121.        }  
  122.       
  123.     /**  
  124.      * 文字颜色转换16进制转换成10进制  
  125.      */ 
  126.      preg_match_all("/([0-f]){2,2}/i"$this -> FONT_COLOR, $MATCHES);  
  127.      if(count($MATCHES) == 3){  
  128.      $this -> RED = hexdec($MATCHES[0][0]);  
  129.      $this -> GREEN = hexdec($MATCHES[0][1]);  
  130.      $this -> BLUE = hexdec($MATCHES[0][2]);  
  131.      }  
  132.    }  
  133.    
  134.  # end of __construct  
  135. /**  
  136.  * 将16进制的颜色转换成10进制的(R,G,B)  
  137.  */ 
  138. function hex2dec(){  
  139.    preg_match_all("/([0-f]){2,2}/i"$this -> FONT_COLOR, $MATCHES);  
  140.    if(count($MATCHES) == 3){  
  141.      $this -> RED = hexdec($MATCHES[0][0]);  
  142.      $this -> GREEN = hexdec($MATCHES[0][1]);  
  143.      $this -> BLUE = hexdec($MATCHES[0][2]);  
  144.      }  
  145.    }  
  146.    
  147.  // 缩放类型  
  148. function zoom_type($ZOOM_TYPE){  
  149.    $this -> ZOOM = $ZOOM_TYPE;  
  150.    }  
  151.    
  152.  // 对图片进行缩放,如果不指定高度和宽度就进行缩放  
  153. function zoom(){  
  154.    // 缩放的大小  
  155.   if($this -> ZOOM == 0){  
  156.      $this -> ZOOM_WIDTH = $this -> PICTURE_WIDTH * $this -> ZOOM_MULTIPLE;  
  157.      $this -> ZOOM_HEIGHT = $this -> PICTURE_HEIGHT * $this -> ZOOM_MULTIPLE;  
  158.      }  
  159.    // 新建一个真彩图象  
  160.   $this -> TRUE_COLOR = imagecreatetruecolor($this -> ZOOM_WIDTH, $this -> ZOOM_HEIGHT);  
  161.    $WHITE = imagecolorallocate($this -> TRUE_COLOR, 255, 255, 255);  
  162.    imagefilledrectangle($this -> TRUE_COLOR, 0, 0, $this -> ZOOM_WIDTH, $this -> ZOOM_HEIGHT, $WHITE);  
  163.    imagecopyresized($this -> TRUE_COLOR, $this -> PICTURE_CREATE, 0, 0, 0, 0, $this -> ZOOM_WIDTH, $this -> ZOOM_HEIGHT, $this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  164.    }  
  165.    
  166.  # end of zoom  
  167. // 裁切图片,按坐标或自动  
  168. function cut(){  
  169.    $this -> TRUE_COLOR = imagecreatetruecolor($this -> CUT_WIDTH, $this -> CUT_WIDTH);  
  170.    imagecopy($this -> TRUE_COLOR, $this -> PICTURE_CREATE, 0, 0, $this -> CUT_X, $this -> CUT_Y, $this -> CUT_WIDTH, $this -> CUT_HEIGHT);  
  171.    }  
  172.    
  173.  # end of cut  
  174. /**  
  175.  * 在图片上放文字或图片  
  176.  * 水印文字  
  177.  */ 
  178. function _mark_text(){  
  179.    $this -> TRUE_COLOR = imagecreatetruecolor($this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  180.    $this -> WORD = mb_convert_encoding($this -> FONT_WORD, 'utf-8''gb2312');  
  181.   /**  
  182.    * 取得使用 TrueType 字体的文本的范围  
  183.    */ 
  184.    $TEMP = imagettfbbox($this -> FONT_SIZE, 0, $this -> FONT_PATH, $this -> WORD);  
  185.    $WORD_LENGTH = strlen($this -> WORD);  
  186.    $WORD_WIDTH = $TEMP[2] - $TEMP[6];  
  187.    $WORD_HEIGHT = $TEMP[3] - $TEMP[7];  
  188.   /**  
  189.    * 文字水印的默认位置为右下角  
  190.    */ 
  191.    if($this -> WORD_X == ""){  
  192.      $this -> WORD_X = $this -> PICTURE_WIDTH - $WORD_WIDTH;  
  193.      }  
  194.    if($this -> WORD_Y == ""){  
  195.      $this -> WORD_Y = $this -> PICTURE_HEIGHT - $WORD_HEIGHT;  
  196.      }  
  197.    imagesettile($this -> TRUE_COLOR, $this -> PICTURE_CREATE);  
  198.    imagefilledrectangle($this -> TRUE_COLOR, 0, 0, $this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT, IMG_COLOR_TILED);  
  199.    $TEXT2 = imagecolorallocate($this -> TRUE_COLOR, $this -> RED, $this -> GREEN, $this -> Blue);  
  200.    imagettftext($this -> TRUE_COLOR, $this -> FONT_SIZE, $this -> ANGLE, $this -> WORD_X, $this -> WORD_Y, $TEXT2$this -> FONT_PATH, $this -> WORD);  
  201.    }  
  202.    
  203. /**  
  204.  * 水印图片  
  205.  */ 
  206.  function _mark_picture(){  
  207.     
  208.   /**  
  209.    * 获取水印图片的信息  
  210.    */ 
  211.    @$SIZE = getimagesize($this -> FORCE_URL);  
  212.    if(!$SIZE){  
  213.      exit($this -> ERROR['unalviable']);  
  214.      }  
  215.    $FORCE_PICTURE_WIDTH = $SIZE[0];  
  216.    $FORCE_PICTURE_HEIGHT = $SIZE[1];  
  217.    // 创建水印图片  
  218.   switch($SIZE[2]){  
  219.    case 1:  
  220.      $FORCE_PICTURE_CREATE = imagecreatefromgif($this -> FORCE_URL);  
  221.      $FORCE_PICTURE_TYPE = "gif";  
  222.      break;  
  223.    case 2:  
  224.      $FORCE_PICTURE_CREATE = imagecreatefromjpeg($this -> FORCE_URL);  
  225.      $FORCE_PICTURE_TYPE = "jpg";  
  226.      break;  
  227.    case 3:  
  228.      $FORCE_PICTURE_CREATE = imagecreatefrompng($this -> FORCE_URL);  
  229.      $FORCE_PICTURE_TYPE = "png";  
  230.      break;  
  231.      }  
  232.   /**  
  233.    * 判断水印图片的大小,并生成目标图片的大小,如果水印比图片大,则生成图片大小为水印图片的大小。否则生成的图片大小为原图片大小。  
  234.    */ 
  235.    $this -> NEW_PICTURE = $this -> PICTURE_CREATE;  
  236.    if($FORCE_PICTURE_WIDTH > $this -> PICTURE_WIDTH){  
  237.    $CREATE_WIDTH = $FORCE_PICTURE_WIDTH - $this -> FORCE_START_X;  
  238.    }else{  
  239.    $CREATE_WIDTH = $this -> PICTURE_WIDTH;  
  240.    }  
  241.  if($FORCE_PICTURE_HEIGHT > $this -> PICTURE_HEIGHT){  
  242.    $CREATE_HEIGHT = $FORCE_PICTURE_HEIGHT - $this -> FORCE_START_Y;  
  243.    }else{  
  244.    $CREATE_HEIGHT = $this -> PICTURE_HEIGHT;  
  245.    }  
  246. /**  
  247.  * 创建一个画布  
  248.  */ 
  249.  $NEW_PICTURE_CREATE = imagecreatetruecolor($CREATE_WIDTH$CREATE_HEIGHT);  
  250.  $WHITE = imagecolorallocate($NEW_PICTURE_CREATE, 255, 255, 255);  
  251. /**  
  252.  * 将背景图拷贝到画布中  
  253.  */ 
  254.  imagecopy($NEW_PICTURE_CREATE$this -> PICTURE_CREATE, 0, 0, 0, 0, $this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  255.    
  256. /**  
  257.  * 将目标图片拷贝到背景图片上  
  258.  */ 
  259.  imagecopy($NEW_PICTURE_CREATE$FORCE_PICTURE_CREATE$this -> FORCE_X, $this -> FORCE_Y, $this -> FORCE_START_X, $this -> FORCE_START_Y, $FORCE_PICTURE_WIDTH$FORCE_PICTURE_HEIGHT);  
  260.  $this -> TRUE_COLOR = $NEW_PICTURE_CREATE;  
  261.  }  
  262.  # end of mark  
  263. function alpha_(){  
  264.  $this -> TRUE_COLOR = imagecreatetruecolor($this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  265.  $rgb = "#CDCDCD";  
  266.  $tran_color = "#000000";  
  267.  for($j = 0;$j <= $this -> PICTURE_HEIGHT-1;$j++){  
  268.    for ($i = 0;$i <= $this -> PICTURE_WIDTH-1;$i++)  
  269.   {  
  270.      $rgb = imagecolorat($this -> PICTURE_CREATE, $i$j);  
  271.      $r = ($rgb >> 16) & 0xFF;  
  272.      $g = ($rgb >> 8) & 0xFF;  
  273.      $b = $rgb & 0xFF;  
  274.      $now_color = imagecolorallocate($this -> PICTURE_CREATE, $r$g$b);  
  275.      if ($now_color == $tran_color)  
  276.     {  
  277.        continue;  
  278.        }  
  279.     else 
  280.       {  
  281.        $color = imagecolorallocatealpha($this -> PICTURE_CREATE, $r$g$b$ALPHA);  
  282.        imagesetpixel($this -> PICTURE_CREATE, $ALPHA_X + $i$ALPHA_Y + $j$color);  
  283.        }  
  284.      $this -> TRUE_COLOR = $this -> PICTURE_CREATE;  
  285.       
  286.      }  
  287.    }  
  288.  }  
  289.    
  290. /**  
  291.  * 图片旋转:  
  292.  * 沿y轴旋转  
  293.  */ 
  294.  function turn_y(){  
  295.  $this -> TRUE_COLOR = imagecreatetruecolor($this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  296.  for ($x = 0; $x < $this -> PICTURE_WIDTH; $x++)  
  297. {  
  298.    imagecopy($this -> TRUE_COLOR, $this -> PICTURE_CREATE, $this -> PICTURE_WIDTH - $x - 1, 0, $x, 0, 1, $this -> PICTURE_HEIGHT);  
  299.    }  
  300.  }  
  301. /**  
  302.  * 沿X轴旋转  
  303.  */ 
  304.  function turn_x(){  
  305.    $this -> TRUE_COLOR = imagecreatetruecolor($this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  306.    for ($y = 0; $y < $this -> PICTURE_HEIGHT; $y++){  
  307.      imagecopy($this -> TRUE_COLOR, $this -> PICTURE_CREATE, 0, $this -> PICTURE_HEIGHT - $y - 1, 0, $y$this -> PICTURE_WIDTH, 1);  
  308.    }  
  309.  }  
  310.    
  311. /**  
  312.  * 任意角度旋转  
  313.  */ 
  314.  function turn(){  
  315.    $this -> TRUE_COLOR = imagecreatetruecolor($this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  316.    imageCopyResized($this -> TRUE_COLOR, $this -> PICTURE_CREATE, 0, 0, 0, 0, $this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT, $this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  317.    $WHITE = imagecolorallocate($this -> TRUE_COLOR, 255, 255, 255);  
  318.    $this -> TRUE_COLOR = imagerotate ($this -> TRUE_COLOR, $this -> CIRCUMROTATE, $WHITE);  
  319.  }  
  320. /**  
  321.  * 图片锐化  
  322.  */ 
  323.  function sharp(){  
  324.    $this -> TRUE_COLOR = imagecreatetruecolor($this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  325.    $cnt = 0;  
  326.    for ($x = 0; $x < $this -> PICTURE_WIDTH; $x++){  
  327.      for ($y = 0; $y < $this -> PICTURE_HEIGHT; $y++){  
  328.        $src_clr1 = imagecolorsforindex($this -> TRUE_COLOR, imagecolorat($this -> PICTURE_CREATE, $x-1, $y-1));  
  329.        $src_clr2 = imagecolorsforindex($this -> TRUE_COLOR, imagecolorat($this -> PICTURE_CREATE, $x$y));  
  330.        $r = intval($src_clr2["red"] + $this -> SHARP * ($src_clr2["red"] - $src_clr1["red"]));  
  331.        $g = intval($src_clr2["green"] + $this -> SHARP * ($src_clr2["green"] - $src_clr1["green"]));  
  332.        $b = intval($src_clr2["blue"] + $this -> SHARP * ($src_clr2["blue"] - $src_clr1["blue"]));  
  333.        $r = min(255, max($r, 0));  
  334.        $g = min(255, max($g, 0));  
  335.        $b = min(255, max($b, 0));  
  336.        if (($DST_CLR = imagecolorexact($this -> PICTURE_CREATE, $r$g$b)) == -1)  
  337.          $DST_CLR = imagecolorallocate($this -> PICTURE_CREATE, $r$g$b);  
  338.        $cnt++;  
  339.        if ($DST_CLR == -1) die("color allocate faile at $x, $y ($cnt).");  
  340.        imagesetpixel($this -> TRUE_COLOR, $x$y$DST_CLR);  
  341.     }  
  342.   }  
  343.  }  
  344. /**  
  345.  * 将图片反色处理??  
  346.  */ 
  347.  function return_color(){  
  348. /**  
  349.  * 创建一个画布  
  350.  */ 
  351.  $NEW_PICTURE_CREATE = imagecreate($this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  352.  $WHITE = imagecolorallocate($NEW_PICTURE_CREATE, 255, 255, 255);  
  353. /**  
  354.  * 将背景图拷贝到画布中  
  355.  */ 
  356.  imagecopy($NEW_PICTURE_CREATE$this -> PICTURE_CREATE, 0, 0, 0, 0, $this -> PICTURE_WIDTH, $this -> PICTURE_HEIGHT);  
  357.  $this -> TRUE_COLOR = $NEW_PICTURE_CREATE;  
  358.  }  
  359.    
  360. /**  
  361.  * 生成目标图片并显示  
  362.  */ 
  363.  function show(){  
  364.  // 判断浏览器,若是IE就不发送头  
  365. if(isset($_SERVER['HTTP_USER_AGENT']))  
  366.   {  
  367.    $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);  
  368.    if(!preg_match('/^.*MSIE.*\)$/i'$ua))  
  369.     {  
  370.      header("Content-type:$this->PICTURE_MIME");  
  371.      }  
  372.    }  
  373.  $OUT = $this -> PICTURE_TYPE;  
  374.  $OUT($this -> TRUE_COLOR);  
  375.  }  
  376.    
  377. /**  
  378.  * 生成目标图片并保存  
  379.  */ 
  380.  function save_picture(){  
  381.  // 以 JPEG 格式将图像输出到浏览器或文件  
  382. $OUT = $this -> PICTURE_TYPE;  
  383.  if(function_exists($OUT)){  
  384.    // 判断浏览器,若是IE就不发送头  
  385.   if(isset($_SERVER['HTTP_USER_AGENT']))  
  386.     {  
  387.      $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);  
  388.      if(!preg_match('/^.*MSIE.*\)$/i'$ua))  
  389.       {  
  390.        header("Content-type:$this->PICTURE_MIME");  
  391.        }  
  392.      }  
  393.    if(!$this -> TRUE_COLOR){  
  394.      exit($this -> ERROR['unavilable']);  
  395.      }else{  
  396.      $OUT($this -> TRUE_COLOR, $this -> DEST_URL);  
  397.      $OUT($this -> TRUE_COLOR);  
  398.      }  
  399.    }  
  400.  }  
  401. /**  
  402.  * 析构函数:释放图片  
  403.  */ 
  404.  function __destruct(){  
  405. /**  
  406.  * 释放图片  
  407.  */ 
  408.  imagedestroy($this -> TRUE_COLOR);  
  409.  imagedestroy($this -> PICTURE_CREATE);  
  410.  }  
  411.  # end of class 
  412. }  
  413. ?> 

这就是非常强大的php图片处理类,好好收藏,亲,相信以后一定会派上用场的。

Tags: PHP图片处理类

分享到: