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

Img.php

<?php
/**
* Created by PhpStorm.
* User: MCtion
* Date: 2015/5/14 0014
* Time: 15:36
* 简单的图像类库,本类中所有相对路径均基于网站根目录,如需修改,则修改常量__WEBROOT__即可
* 功能:指定文字内容创建图片(不支持中文)、创建验证码图片、创建缩略图、其他功能待续
* 方法:
* Style(array $Options) 设置图片样式,每次设定前将重置为默认样式
* Create_Img_Png() 创建PNG图像,相关属性由Style指定
* Create_Img_Jpeg() 创建JPEG图像,相关属性由Style指定
* Create_Verify() 创建验证码图像,相关属性由Style指定
* Get_Verify() 获得创建的验证码值,MD5加密
* Load_Img(string $FilePath) 加载图像,创建图像源,供其他方法调用源,FilePath为图像相对路径
* Create_Thumb(string $FileName,string $FilePath) 创建由Load_Img()加载的图像的缩略图,FileName为保存后的图像前缀,FilePath为保存图像的相对路径,不包含文件名(例:/Uploads/images/Thumb/)
*/ if(!defined("__WEBROOT__")) define("__WEBROOT__",$_SERVER[''DOCUMENT_ROOT'']); class Img {
protected $_Img; //图片源
protected $_FileImg; //加载的图片源
protected $_FileInfo; //加载的图片的信息数组
protected $_PicInfo; //加载的图片的宽高等信息数组
protected $_Rand = ''abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ1234567890''; //随机因子
protected $_Code = ''''; //验证码
public $Width = 300;//图片默认宽
public $Height = 80; //图片默认高
public $BackgroundColor = "000000";
public $Font = "/phps/Public/Font/ARIALNB.TTF"; //默认字体
public $FontSize = 16; //默认字体字号
public $FontColor = "ffffff"; //默认字体颜色
public $Content = "Test Word";
public $Align = "left";
public $Codes = 4; //验证码个数
public $Line = 6; //干扰线条的个数
public $LoadErr = ''''; //错误信息 //public function __construct(){} /** 设置图片属性
* @param array $Options 属性数组
* @return $this 返回对象
*/
public function Style($Options){
$this -> _Re_Set();
foreach($Options as $K=>$V){
if(in_array($K,array(''Width'',''Height'',''BackgroundColor'',''Font'',''FontSize'',''FontColor'',''Content'',''Align'',''Codes'',''Line'',''Snow''))){
if($K == "BackgroundColor" || $K == "FontColor"){
if(preg_match("#([a-zA-Z0-9]{6})#",$V)) $this -> $K = $V;
}else{
$this -> $K = $V;
}
}
}
return $this;
} /**
* 重置属性,不提供外部访问
*/
protected function _Re_Set(){
$this -> Width = 100;
$this -> Height = 30;
$this -> BackgroundColor = "000000";
$this -> Font = "/phps/Public/Font/ARIALNB.TTF";
$this -> FontSize = 16;
$this -> FontColor = "ffffff";
$this -> Align = "left";
$this -> Codes =4;
$this -> Line = 6;
} /**
* 创建图像源、添加背景、创建图像
* @param bool $BGC 指定是否创建背景色及矩形块
*/
protected function _Create_Img_GB($BGC = True){
$this -> _Img = imagecreatetruecolor($this -> Width,$this -> Height); //创建背景源
if($BGC){
preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this -> BackgroundColor,$ColorArr); //将颜色值分隔成三组16位进制数
$Color = imagecolorallocate($this -> _Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3])); //给Img图像源添加背景色
imagefilledrectangle($this -> _Img,0,$this -> Height,$this -> Width,0,$Color); //创建图像
}
} /**
* 创建随机验证码
*/
protected function _Create_Code(){
$Len = strlen($this -> _Rand) - 1;
for($i = 0;$i < $this -> Codes;$i++){
$this -> _Code .= $this -> _Rand[mt_rand(0,$Len)];
}
} /**
* 向图像中写入字符串,暂不支持中文
*/
protected function _Write_Text(){
$FontWidth = imagefontwidth($this -> FontSize); //获取字号的一个字符的宽度
preg_match_all(''/(.)/us'', $this -> Content, $TextArr); //将内容分隔成数组一遍统计个数
$FontHeight = imagefontheight($this -> FontSize); //获取字号的高度
$X = ceil(($this -> Width - ($FontWidth * count($TextArr[0]))) / 2); //设置X轴距左边距的距离
$Y = ceil(($this -> Height + $FontHeight) / 2); //设置Y轴距上边距的距离
preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this -> FontColor,$ColorArr);
$Color = imagecolorallocate($this -> _Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3])); //设置文字颜色
imagettftext($this -> _Img,$this -> FontSize,0,$X,$Y,$Color,__WEBROOT__.$this -> Font,$this -> Content); //写入内容
} /**
* 向图像中写入验证码
*/
protected function _Write_Code(){
$_X = $this -> Width / $this -> Codes; //设置宽高比
for($i = 0;$i < $this -> Codes;$i++){ //循环Codes次,每次生成一位验证码值
$Color = imagecolorallocate($this -> _Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); //随机生成验证码值的颜色
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]); //生成一位验证码值
}
} /**
* 向图像中写入干扰线条
*/
protected function _Write_Line() { //生成干扰线条
for ($i=0;$i < $this -> Line;$i++) {
$Color = imagecolorallocate($this -> _Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline($this -> _Img,mt_rand(0,$this -> Width),mt_rand(0,$this -> Height),mt_rand(0,$this -> Width),mt_rand(0,$this -> Height),$Color);
}
} /**
* 设置图像类型为JPEG
*/
protected function _Img_Jpeg(){
header(''Content-type:image/jpeg'');
imagejpeg($this -> _Img);
imagedestroy($this -> _Img);
} /**
* 设置图像类型为PNG
*/
protected function _Img_Png(){
header(''Content-type:image/png'');
imagepng($this -> _Img);
imagedestroy($this -> _Img);
} /**
* 创建JPEG的字符串图像
*/
public function Create_Img_Jpg(){
$this -> _Create_Img_GB(True);
$this -> _Write_Text();
$this -> _Img_Jpeg();
} /**
* 创建PNG的字符串图像
*/
public function Create_Img_Png(){
$this -> _Create_Img_GB(True);
$this -> _Write_Text();
$this -> _Img_Png();
} /**
* 创建验证码的PNG图像
*/
public function Create_Verify(){
$this -> BackgroundColor = '''';
for($I = 0;$I < 3;$I++){
$this -> BackgroundColor .= dechex(mt_rand(20,155));
}
$this -> _Create_Img_GB(True);
$this -> _Create_Code();
$this -> _Write_Line();
$this -> _Write_Code();
$this -> _Img_Png();
} /**
* 外部获取MD5加密后的验证码
* @return string
*/
public function Get_Verify(){
return md5($this -> _Code);
} /**
* 加载一个图像文件,并获取图像相关信息
* @param string $FilePath 图像相对路径地址
* @return $this|bool 成功返回对象,否则返回FALSE
*/
public function Load_Img($FilePath){
$FilePath = __WEBROOT__.$FilePath;
if(!is_file($FilePath)){
$this -> LoadErr = "路径错误,文件不存在";
Return False;
}
$this -> _PicInfo = getimagesize($FilePath);
$this -> _FileInfo = pathinfo($FilePath);
switch($this -> _PicInfo[2]){
case 1:$this ->_FileImg = imagecreatefromgif($FilePath);break;
case 2:$this ->_FileImg = imagecreatefromjpeg($FilePath);break;
case 3:$this ->_FileImg = imagecreatefrompng($FilePath);break;
default:$this -> LoadErr = "类型错误,不支持的图片类型";Return False;
}
Return True;
} /**
* 创建缩略图
* @param string $FileName 保存的图片名称前缀
* @param string $FilePath 保存图片的相对路径
* @return mixed 返回生成的图片的信息数组
*/
public function Create_Thumb($FileName,$FilePath){
$SavePath = __WEBROOT__.$FilePath;
if(!file_exists($SavePath)){
mkdir($SavePath,0777,true);
}
$FileName = $FileName.date("YmdHis").rand(100,999).''.''.$this -> _FileInfo[''extension''];
$FilePath = $FilePath.$FileName;
$SavePath = $SavePath.$FileName;
$this -> _Create_Img_GB(False);
imagecopyresampled($this -> _Img,$this -> _FileImg,0,0,0,0,$this -> Width,$this -> Height,$this -> _PicInfo[0],$this -> _PicInfo[1]);
switch($this -> _PicInfo[2]){
case 1:imagegif($this -> _Img,$SavePath);break;
case 2:imagejpeg($this -> _Img,$SavePath);break;
case 3:imagepng($this -> _Img,$SavePath);break;
}
$FIleInfo[''FileName''] = $FileName;
$FIleInfo[''FilePath''] = $FilePath;
Return $FIleInfo;
}
}

使用示例

$Img = new Img();

$Options[''Width''] = 300;
$Options[''Height''] = 100;
$Options[''Content''] = "Test Create Img";
$Options[''FontColor''] = "FF0000";
$Options[''BackgroundColor''] = "AAAAAA";
$Img -> Style($Options) -> Create_Img_Jpg(); if($Img -> Load_Img("/Public/images/ad1.png")){
$FileInfo = $Img -> Style(array(''Width''=>30,''Height''=>30)) -> Create_Thumb("Thumb","/Uploads/images/");
var_dump($FileInfo);
}else{
die("加载图像失败,".$Img -> LoadErr);
}
转载自:http://www.aspnetjia.com

PHP图像处理类库及演示分享的更多相关文章

  1. 【视频开发】 十全大补:CxImage图像处理类库

     十全大补:CxImage图像处理类库 转载IT168        CxImage是一个可以用于MFC 的C++图像处理类库类,它可以打开,保存,显示,转换各种常见格式的图像文件,比如BMP, JP ...

  2. Atitit 图像处理类库大总结attilax qc20

    Atitit 图像处理类库大总结attilax qc20 1.1. 选择与组合不同的图像处理类库1 1.2. Halcon 貌似商业工具,功能强大.1 1.3. Openvc  Openvc功能也是比 ...

  3. Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库

    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库1.1. 5种常用的Photoshop滤镜,分别针对照片的曝光.风格色调.黑白照片处理.锐利度.降噪这五大 ...

  4. Atitit js canvas的图像处理类库attilax总结与事业

    Atitit js canvas的图像处理类库attilax总结与事业 1.1. 脸部识别JavaScript类库Tracking.js1 1.2. AlloyImage特性1 1.3. CamanJ ...

  5. Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx

    Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx 1. 安装的原理,主要是解压,复制,设置三大步1 2. 目前我们常见的三大种安装模式,二进制模式与源码安装模 ...

  6. Atitit 图像处理类库 halcon11  安装与环境搭建attilax总结

    Atitit 图像处理类库 halcon11  安装与环境搭建attilax总结 正常安装软件,安装前请先退出其它一切正在运行的程序. 先安装halcon-10.0-windows.exe.安装完成后 ...

  7. atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本

    atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本 1. 去除边框思路原理 1 2. Thumbnailator 是一个用来生成图像缩略图.裁切. ...

  8. Visual C++ 图像处理类库CxImage源代码

    说明:VC++ 图像处理类库CxImage源代码,CxImage是一个可以用于MFC 的C++类,可以打开,保存,显示,转换各种格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, ...

  9. C++ 图像处理类库

    GIFLIB是一个 C 语言的 Gif 图像处理库.支持 Gif 图像读写. 如果需要单独处理某类图片格式,以上类库是比较好的选择,如果处理的格式种类比较多,下面的类库是比较好的选择. ImageMa ...

随机推荐

  1. WPF快速精通版

    命名空间: xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:U ...

  2. CSS3学习笔记——伪类hover

    最近看到一篇文章:“Transition.Transform和Animation使用简介及应用展示”    ,想看看里面 “不同缓动类效果demo”例子的效果,发现了一个问题如下: .Trans_Bo ...

  3. [转]gulp构建前端工程

    摘要: Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript. ...

  4. 搬家至个人独立博客virson.cn

    最近正在将博客园的文章搬到自己的独立博客,以后基本上不会在博客园更新文章了,欢迎光临我的新博客:www.virson.cn,博客内容持续更新中……

  5. CSS-JQUERY笔记

    Ready $(document).ready(function(){ }) Input_div_span Input-长度限制 <input maxLength="2"&g ...

  6. TN035: Using Multiple Resource Files and Header Files with Visual C++

    TN035: Using Multiple Resource Files and Header Files with Visual C++ This note describes how the Vi ...

  7. Android之输入框光标和Hint的位置

    如图所示,要实现这一的需求,一般人的布局方式就是左边一button,右边一button,中间一个EditText,为了输入框的响应触摸范围更大往往不会把宽度设置为wrap_content,要么设置成m ...

  8. 生成证书时Distribution下面App Store and Ad Hoc 选项不能选择的原因及解决办法

    出现这个问题的原因是:发布用的证书创建是有数量限制的,仅支持3个,所以把原先不用的证书Revoke掉就可以了

  9. 安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)

    这几天一直研究在安卓开发中图片应该如何处理,在网上翻了好多资料,这里做点小总结,如果朋友们有更好的解决方案,可以留言一起交流下. 内存缓存技术 在我们开发程序中要在界面上加载一张图片是件非常容易的事情 ...

  10. MSSQL大数据量增加字段耗时对比

    单个数据表记录数为1亿4千万条. 一.测试同时增加两个允许为空的字段. ALTER TABLE [dbo].[XRecord] ADD [sType] int,[cType] int GO 开始时间: ...