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

PHP图像处理类库及演示分享

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-26 22:06:48 浏览: 评论:0 

近期需要做一些图像处理方面的学习和研究,首要任务就是选择一套合适的图像处理类库。于是参考其他类库自己编写了一个简单的,仅仅实现了指定文字内容创建图片(不支持中文)、创建验证码图片、创建缩略图,有需要的小伙伴可以参考下。

简单写了一个PHP的图像处理类库,虽然功能比较少,但是目前也没用到太高级的,以后用到了再填吧,或者哪位给点建议加上什么功能,或者有什么需求可以跟我说,我有时间加上,如果哪位对这个类库进行了扩展的话,还麻烦拿出来大家分享一下,代码现在是能用就行,考虑的东西不是很多,有什么更好的建议请告诉我,谢谢

Img.php

  1. <?php 
  2. /** 
  3.  * Created by PhpStorm. 
  4.  * User: MCtion 
  5.  * Date: 2015/5/14 0014 
  6.  * Time: 15:36 
  7.  * 简单的图像类库,本类中所有相对路径均基于网站根目录,如需修改,则修改常量__WEBROOT__即可 
  8.  * 功能:指定文字内容创建图片(不支持中文)、创建验证码图片、创建缩略图、其他功能待续 
  9.  * 方法: 
  10.  *   Style(array $Options) 设置图片样式,每次设定前将重置为默认样式 
  11.  *   Create_Img_Png() 创建PNG图像,相关属性由Style指定 
  12.  *   Create_Img_Jpeg() 创建JPEG图像,相关属性由Style指定 
  13.  *   Create_Verify() 创建验证码图像,相关属性由Style指定 
  14.  *   Get_Verify() 获得创建的验证码值,MD5加密 
  15.  *   Load_Img(string $FilePath) 加载图像,创建图像源,供其他方法调用源,FilePath为图像相对路径 
  16.  *   Create_Thumb(string $FileName,string $FilePath) 创建由Load_Img()加载的图像的缩略图,FileName为保存后的图像前缀,FilePath为保存图像的相对路径,不包含文件名(例:/Uploads/images/Thumb/) 
  17.  */ 
  18.    
  19. if(!defined("__WEBROOT__")) define("__WEBROOT__",$_SERVER['DOCUMENT_ROOT']); 
  20.    
  21. class Img { 
  22.   protected $_Img//图片源 
  23.   protected $_FileImg//加载的图片源 
  24.   protected $_FileInfo//加载的图片的信息数组 
  25.   protected $_PicInfo//加载的图片的宽高等信息数组 
  26.   protected $_Rand = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ1234567890'//随机因子 
  27.   protected $_Code = ''//验证码 
  28.   public $Width = 300;//图片默认宽 
  29.   public $Height = 80; //图片默认高 
  30.   public $BackgroundColor = "000000"
  31.   public $Font = "/phps/Public/Font/ARIALNB.TTF"//默认字体 
  32.   public $FontSize = 16; //默认字体字号 
  33.   public $FontColor = "ffffff"//默认字体颜色 
  34.   public $Content = "Test Word"
  35.   public $Align = "left"
  36.   public $Codes = 4; //验证码个数 
  37.   public $Line = 6; //干扰线条的个数 
  38.   public $LoadErr = ''//错误信息 
  39.    
  40.   //public function __construct(){} 
  41.    
  42.   /** 设置图片属性 
  43.    * @param array $Options 属性数组 
  44.    * @return $this 返回对象 
  45.    */ 
  46.   public function Style($Options){ 
  47.     $this -> _Re_Set(); 
  48.     foreach($Options as $K=>$V){ 
  49.       if(in_array($K,array('Width','Height','BackgroundColor','Font','FontSize','FontColor','Content','Align','Codes','Line','Snow'))){ 
  50.         if($K == "BackgroundColor" || $K == "FontColor"){ 
  51.           if(preg_match("#([a-zA-Z0-9]{6})#",$V)) $this -> $K = $V
  52.         }else
  53.           $this -> $K = $V
  54.         } 
  55.       } 
  56.     } 
  57.     return $this
  58.   } 
  59.    
  60.   /** 
  61.    * 重置属性,不提供外部访问 
  62.    */ 
  63.   protected function _Re_Set(){ 
  64.     $this -> Width = 100; 
  65.     $this -> Height = 30; 
  66.     $this -> BackgroundColor = "000000"
  67.     $this -> Font = "/phps/Public/Font/ARIALNB.TTF"
  68.     $this -> FontSize = 16; 
  69.     $this -> FontColor = "ffffff"
  70.     $this -> Align = "left"
  71.     $this -> Codes =4; 
  72.     $this -> Line = 6; 
  73.   } 
  74.    
  75.   /** 
  76.    * 创建图像源、添加背景、创建图像 
  77.    * @param bool $BGC 指定是否创建背景色及矩形块 
  78.    */ 
  79.   protected function _Create_Img_GB($BGC = True){ 
  80.     $this -> _Img = imagecreatetruecolor($this -> Width,$this -> Height); //创建背景源 
  81.     if($BGC){ 
  82.       preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this -> BackgroundColor,$ColorArr); //将颜色值分隔成三组16位进制数 
  83.       $Color = imagecolorallocate($this -> _Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3])); //给Img图像源添加背景色 
  84.       imagefilledrectangle($this -> _Img,0,$this -> Height,$this -> Width,0,$Color); //创建图像 
  85.     } 
  86.   } 
  87.    
  88.   /** 
  89.    * 创建随机验证码 
  90.    */ 
  91.   protected function _Create_Code(){ 
  92.     $Len = strlen($this -> _Rand) - 1; 
  93.     for($i = 0;$i < $this -> Codes;$i++){ 
  94.       $this -> _Code .= $this -> _Rand[mt_rand(0,$Len)]; 
  95.     } 
  96.   } 
  97.    
  98.   /** 
  99.    * 向图像中写入字符串,暂不支持中文 
  100.    */ 
  101.   protected function _Write_Text(){ 
  102.     $FontWidth = imagefontwidth($this -> FontSize); //获取字号的一个字符的宽度 
  103.     preg_match_all('/(.)/us'$this -> Content, $TextArr); //将内容分隔成数组一遍统计个数 
  104.     $FontHeight = imagefontheight($this -> FontSize); //获取字号的高度 
  105.     $X = ceil(($this -> Width - ($FontWidth * count($TextArr[0]))) / 2); //设置X轴距左边距的距离 
  106.     $Y = ceil(($this -> Height + $FontHeight) / 2); //设置Y轴距上边距的距离 
  107.     preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this -> FontColor,$ColorArr); 
  108.     $Color = imagecolorallocate($this -> _Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3])); //设置文字颜色 
  109.     imagettftext($this -> _Img,$this -> FontSize,0,$X,$Y,$Color,__WEBROOT__.$this -> Font,$this -> Content); //写入内容 
  110.   } 
  111.    
  112.   /** 
  113.    * 向图像中写入验证码 
  114.    */ 
  115.   protected function _Write_Code(){ 
  116.     $_X = $this -> Width / $this -> Codes; //设置宽高比 
  117.     for($i = 0;$i < $this -> Codes;$i++){ //循环Codes次,每次生成一位验证码值 
  118.       $Color = imagecolorallocate($this -> _Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); //随机生成验证码值的颜色 
  119.       imagettftext($this -> _Img,$this -> FontSize,mt_rand(-30,30),$_X*$i+mt_rand(1,5),$this -> Height / 1.3,$Color,__WEBROOT__.$this -> Font,$this -> _Code[$i]); //生成一位验证码值 
  120.     } 
  121.   } 
  122.    
  123.   /** 
  124.    * 向图像中写入干扰线条 
  125.    */ 
  126.   protected function _Write_Line() { //生成干扰线条 
  127.     for ($i=0;$i < $this -> Line;$i++) { 
  128.       $Color = imagecolorallocate($this -> _Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); 
  129.       imageline($this -> _Img,mt_rand(0,$this -> Width),mt_rand(0,$this -> Height),mt_rand(0,$this -> Width),mt_rand(0,$this -> Height),$Color); 
  130.     } 
  131.   } 
  132.    
  133.   /** 
  134.    * 设置图像类型为JPEG 
  135.    */ 
  136.   protected function _Img_Jpeg(){ 
  137.     header('Content-type:image/jpeg'); 
  138.     imagejpeg($this -> _Img); 
  139.     imagedestroy($this -> _Img); 
  140.   } 
  141.    
  142.   /** 
  143.    * 设置图像类型为PNG 
  144.    */ 
  145.   protected function _Img_Png(){ 
  146.     header('Content-type:image/png'); 
  147.     imagepng($this -> _Img); 
  148.     imagedestroy($this -> _Img); 
  149.   } 
  150.    
  151.   /** 
  152.    * 创建JPEG的字符串图像 
  153.    */ 
  154.   public function Create_Img_Jpg(){ 
  155.     $this -> _Create_Img_GB(True); 
  156.     $this -> _Write_Text(); 
  157.     $this -> _Img_Jpeg(); 
  158.   } 
  159.    
  160.   /** 
  161.    * 创建PNG的字符串图像 
  162.    */ 
  163.   public function Create_Img_Png(){ 
  164.     $this -> _Create_Img_GB(True); 
  165.     $this -> _Write_Text(); 
  166.     $this -> _Img_Png(); 
  167.   } 
  168.    
  169.   /** 
  170.    * 创建验证码的PNG图像 
  171.    */ 
  172.   public function Create_Verify(){ 
  173.     $this -> BackgroundColor = ''
  174.     for($I = 0;$I < 3;$I++){ 
  175.       $this -> BackgroundColor .= dechex(mt_rand(20,155)); 
  176.     } 
  177.     $this -> _Create_Img_GB(True); 
  178.     $this -> _Create_Code(); 
  179.     $this -> _Write_Line(); 
  180.     $this -> _Write_Code(); 
  181.     $this -> _Img_Png(); 
  182.   } 
  183.    
  184.   /** 
  185.    * 外部获取MD5加密后的验证码 
  186.    * @return string 
  187.    */ 
  188.   public function Get_Verify(){ 
  189.     return md5($this -> _Code); 
  190.   } 
  191.    
  192.   /** 
  193.    * 加载一个图像文件,并获取图像相关信息 
  194.    * @param string $FilePath 图像相对路径地址 
  195.    * @return $this|bool 成功返回对象,否则返回FALSE 
  196.    */ 
  197.   public function Load_Img($FilePath){ 
  198.     $FilePath = __WEBROOT__.$FilePath
  199.     if(!is_file($FilePath)){ 
  200.       $this -> LoadErr = "路径错误,文件不存在"
  201.       Return False; 
  202.     } 
  203.     $this -> _PicInfo = getimagesize($FilePath); 
  204.     $this -> _FileInfo = pathinfo($FilePath); 
  205.     switch($this -> _PicInfo[2]){ 
  206.       case 1:$this ->_FileImg = imagecreatefromgif($FilePath);break
  207.       case 2:$this ->_FileImg = imagecreatefromjpeg($FilePath);break
  208.       case 3:$this ->_FileImg = imagecreatefrompng($FilePath);break
  209.       default:$this -> LoadErr = "类型错误,不支持的图片类型";Return False; 
  210.     } 
  211.     Return True; 
  212.   } 
  213.    
  214.   /** 
  215.    * 创建缩略图 
  216.    * @param string $FileName 保存的图片名称前缀 
  217.    * @param string $FilePath 保存图片的相对路径 
  218.    * @return mixed 返回生成的图片的信息数组 
  219.    */ 
  220.   public function Create_Thumb($FileName,$FilePath){ 
  221.     $SavePath = __WEBROOT__.$FilePath
  222.     if(!file_exists($SavePath)){ 
  223.       mkdir($SavePath,0777,true); 
  224.     } 
  225.     $FileName = $FileName.date("YmdHis").rand(100,999).'.'.$this -> _FileInfo['extension']; 
  226.     $FilePath = $FilePath.$FileName
  227.     $SavePath = $SavePath.$FileName
  228.     $this -> _Create_Img_GB(False); 
  229.     imagecopyresampled($this -> _Img,$this -> _FileImg,0,0,0,0,$this -> Width,$this -> Height,$this -> _PicInfo[0],$this -> _PicInfo[1]); 
  230.     switch($this -> _PicInfo[2]){ 
  231.       case 1:imagegif($this -> _Img,$SavePath);break
  232.       case 2:imagejpeg($this -> _Img,$SavePath);break
  233.       case 3:imagepng($this -> _Img,$SavePath);break
  234.     } 
  235.     $FIleInfo['FileName'] = $FileName
  236.     $FIleInfo['FilePath'] = $FilePath
  237.     Return $FIleInfo
  238.   } 

使用示例

  1. $Img = new Img(); 
  2.    
  3. $Options['Width'] = 300; 
  4. $Options['Height'] = 100; 
  5. $Options['Content'] = "Test Create Img"
  6. $Options['FontColor'] = "FF0000"
  7. $Options['BackgroundColor'] = "AAAAAA"
  8. $Img -> Style($Options) -> Create_Img_Jpg(); 
  9.    
  10. if($Img -> Load_Img("/Public/images/ad1.png")){ 
  11.   $FileInfo = $Img -> Style(array('Width'=>30,'Height'=>30)) -> Create_Thumb("Thumb","/Uploads/images/"); 
  12.   var_dump($FileInfo); 
  13. }else
  14.   die("加载图像失败,".$Img -> LoadErr); 

以上所述就是本文的全部内容了,希望大家能够喜欢。

Tags: PHP图像处理类库

分享到: