首页 > 开发 > PHP > 正文

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

2024-05-04 23:35:17
字体:
来源:转载
供稿:网友

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

简单写了一个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. return $this
  55.  
  56. /** 
  57. * 重置属性,不提供外部访问 
  58. */ 
  59. protected function _Re_Set(){ 
  60. $this -> Width = 100; 
  61. $this -> Height = 30; 
  62. $this -> BackgroundColor = "000000"
  63. $this -> Font = "/phps/Public/Font/ARIALNB.TTF"
  64. $this -> FontSize = 16; 
  65. $this -> FontColor = "ffffff"
  66. $this -> Align = "left"
  67. $this -> Codes =4; 
  68. $this -> Line = 6; 
  69.  
  70. /** 
  71. * 创建图像源、添加背景、创建图像 
  72. * @param bool $BGC 指定是否创建背景色及矩形块 
  73. */ 
  74. protected function _Create_Img_GB($BGC = True){ 
  75. $this -> _Img = imagecreatetruecolor($this -> Width,$this -> Height); //创建背景源 
  76. if($BGC){ 
  77. preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this -> BackgroundColor,$ColorArr); //将颜色值分隔成三组16位进制数 
  78. $Color = imagecolorallocate($this -> _Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3])); //给Img图像源添加背景色 
  79. imagefilledrectangle($this -> _Img,0,$this -> Height,$this -> Width,0,$Color); //创建图像 
  80.  
  81. /** 
  82. * 创建随机验证码 
  83. */ 
  84. protected function _Create_Code(){ 
  85. $Len = strlen($this -> _Rand) - 1; 
  86. for($i = 0;$i < $this -> Codes;$i++){ 
  87. $this -> _Code .= $this -> _Rand[mt_rand(0,$Len)]; 
  88.  
  89. /** 
  90. * 向图像中写入字符串,暂不支持中文 
  91. */ 
  92. protected function _Write_Text(){ 
  93. $FontWidth = imagefontwidth($this -> FontSize); //获取字号的一个字符的宽度 
  94. preg_match_all('/(.)/us'$this -> Content, $TextArr); //将内容分隔成数组一遍统计个数 
  95. $FontHeight = imagefontheight($this -> FontSize); //获取字号的高度 
  96. $X = ceil(($this -> Width - ($FontWidth * count($TextArr[0]))) / 2); //设置X轴距左边距的距离 
  97. $Y = ceil(($this -> Height + $FontHeight) / 2); //设置Y轴距上边距的距离 
  98. preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this -> FontColor,$ColorArr); 
  99. $Color = imagecolorallocate($this -> _Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3])); //设置文字颜色 
  100. imagettftext($this -> _Img,$this -> FontSize,0,$X,$Y,$Color,__WEBROOT__.$this -> Font,$this -> Content); //写入内容 
  101.  
  102. /** 
  103. * 向图像中写入验证码 
  104. */ 
  105. protected function _Write_Code(){ 
  106. $_X = $this -> Width / $this -> Codes; //设置宽高比 
  107. for($i = 0;$i < $this -> Codes;$i++){ //循环Codes次,每次生成一位验证码值 
  108. $Color = imagecolorallocate($this -> _Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); //随机生成验证码值的颜色 
  109. 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]); //生成一位验证码值 
  110.  
  111. /** 
  112. * 向图像中写入干扰线条 
  113. */ 
  114. protected function _Write_Line() { //生成干扰线条 
  115. for ($i=0;$i < $this -> Line;$i++) { 
  116. $Color = imagecolorallocate($this -> _Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); 
  117. imageline($this -> _Img,mt_rand(0,$this -> Width),mt_rand(0,$this -> Height),mt_rand(0,$this -> Width),mt_rand(0,$this -> Height),$Color); 
  118.  
  119. /** 
  120. * 设置图像类型为JPEG 
  121. */ 
  122. protected function _Img_Jpeg(){ 
  123. header('Content-type:image/jpeg'); 
  124. imagejpeg($this -> _Img); 
  125. imagedestroy($this -> _Img); 
  126.  
  127. /** 
  128. * 设置图像类型为PNG 
  129. */ 
  130. protected function _Img_Png(){ 
  131. header('Content-type:image/png'); 
  132. imagepng($this -> _Img); 
  133. imagedestroy($this -> _Img); 
  134.  
  135. /** 
  136. * 创建JPEG的字符串图像 
  137. */ 
  138. public function Create_Img_Jpg(){ 
  139. $this -> _Create_Img_GB(True); 
  140. $this -> _Write_Text(); 
  141. $this -> _Img_Jpeg(); 
  142.  
  143. /** 
  144. * 创建PNG的字符串图像 
  145. */ 
  146. public function Create_Img_Png(){ 
  147. $this -> _Create_Img_GB(True); 
  148. $this -> _Write_Text(); 
  149. $this -> _Img_Png(); 
  150.  
  151. /** 
  152. * 创建验证码的PNG图像 
  153. */ 
  154. public function Create_Verify(){ 
  155. $this -> BackgroundColor = ''
  156. for($I = 0;$I < 3;$I++){ 
  157. $this -> BackgroundColor .= dechex(mt_rand(20,155)); 
  158. $this -> _Create_Img_GB(True); 
  159. $this -> _Create_Code(); 
  160. $this -> _Write_Line(); 
  161. $this -> _Write_Code(); 
  162. $this -> _Img_Png(); 
  163.  
  164. /** 
  165. * 外部获取MD5加密后的验证码 
  166. * @return string 
  167. */ 
  168. public function Get_Verify(){ 
  169. return md5($this -> _Code); 
  170.  
  171. /** 
  172. * 加载一个图像文件,并获取图像相关信息 
  173. * @param string $FilePath 图像相对路径地址 
  174. * @return $this|bool 成功返回对象,否则返回FALSE 
  175. */ 
  176. public function Load_Img($FilePath){ 
  177. $FilePath = __WEBROOT__.$FilePath
  178. if(!is_file($FilePath)){ 
  179. $this -> LoadErr = "路径错误,文件不存在"
  180. Return False; 
  181. $this -> _PicInfo = getimagesize($FilePath); 
  182. $this -> _FileInfo = pathinfo($FilePath); 
  183. switch($this -> _PicInfo[2]){ 
  184. case 1:$this ->_FileImg = imagecreatefromgif($FilePath);break
  185. case 2:$this ->_FileImg = imagecreatefromjpeg($FilePath);break
  186. case 3:$this ->_FileImg = imagecreatefrompng($FilePath);break
  187. default:$this -> LoadErr = "类型错误,不支持的图片类型";Return False; 
  188. Return True; 
  189.  
  190. /** 
  191. * 创建缩略图 
  192. * @param string $FileName 保存的图片名称前缀 
  193. * @param string $FilePath 保存图片的相对路径 
  194. * @return mixed 返回生成的图片的信息数组 
  195. */ 
  196. public function Create_Thumb($FileName,$FilePath){ 
  197. $SavePath = __WEBROOT__.$FilePath
  198. if(!file_exists($SavePath)){ 
  199. mkdir($SavePath,0777,true); 
  200. $FileName = $FileName.date("YmdHis").rand(100,999).'.'.$this -> _FileInfo['extension']; 
  201. $FilePath = $FilePath.$FileName
  202. $SavePath = $SavePath.$FileName
  203. $this -> _Create_Img_GB(False); 
  204. imagecopyresampled($this -> _Img,$this -> _FileImg,0,0,0,0,$this -> Width,$this -> Height,$this -> _PicInfo[0],$this -> _PicInfo[1]); 
  205. switch($this -> _PicInfo[2]){ 
  206. case 1:imagegif($this -> _Img,$SavePath);break
  207. case 2:imagejpeg($this -> _Img,$SavePath);break
  208. case 3:imagepng($this -> _Img,$SavePath);break
  209. $FIleInfo['FileName'] = $FileName
  210. $FIleInfo['FilePath'] = $FilePath
  211. Return $FIleInfo

使用示例

 

 
  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); 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表