php GD库简单使用和封装
GD库创建图像步骤
<?php
//1.创建画布
$width = 300;
$height= 200;
$image=imagecreatetruecolor($width,$height); //2.创建颜色 [RGB红绿蓝]
$white=imagecolorallocate($image,255,255,255);//白色
$black=imagecolorallocate($image,0,0,0);//黑色
$red=imagecolorallocate($image,255,0,0);//红色
$green=imagecolorallocate($image,0,255,0);//绿色
$blue=imagecolorallocate($image,0,0,255);//蓝色 //3.进行绘画
imagefill($image,0,0,$white);//将背景设置为白色,默认黑色
//水平绘制字符
imagechar($image,2,40,40,'R',$red);
//垂直绘制字符
imagecharup($image,3,80,80,'G',$green); //水平绘制字符串
imagestring($image,4,120,120,"BLUE",$blue);
//垂直绘制字符
imagestringup($image,5,160,160,'BLACK',$black); //画出一条红色的线
imageline($image,20,15,200,150,$red); //4.输出或保存
header('content-type:image/png');
imagejpeg($image); if(imagejpeg($image,'./gd.png')) {
echo '保存成功';
} else {
echo '保存失败';
} //5.销毁画布
imagedestroy($image);
封装类demo
<?php
//验证码类
class ValidateCode { /**
*简单封装demo方法
*/
public $type;//验证字符串类型
public $length;//验证字符串长度 public function __construct($type,$length){
$this->type=$type;
$this->length=$length;
} public function getVerify() {
$type=$this->type;
$length=$this->length; // 随机颜色
function getRandColor($image) {
return imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
} // 创建画布
$width=20+$length*40;
$height=45;
$image=imagecreatetruecolor($width,$height); // 创建颜色
$white=imagecolorallocate($image,255,255,255); // 绘制填充矩形
imagefilledrectangle($image,0,0,$width,$height,$white); /**
* 验证字符串类型
* 1-数字
* 2-字母
* 3-数字+字母
*/
switch ($type) {
case 1:
// 数字
$codeArray = array_rand(range(0,9),$length);
break;
case 2:
// 字母
$codeArray = array_rand(array_flip(array_merge(range('a','z'),range('A','Z'))),$length);
break;
case 3:
// 数字+字母
$codeArray = array_rand(array_flip(array_merge(range(0,9),range('a','z'),range('A','Z'))),$length);
break;
default:
exit('非法参数');
break;
} //session保存验证码,登录时验证code
session_start();
$_SESSION['code'] = join('',$codeArray); for($i=0;$i<$length;$i++) {
$size=mt_rand(20,22); $textWidth = imagefontwidth($size);
$textHeight= imagefontheight($size); $angle=mt_rand(-3,3); $x=($width/$length)*$i+$textWidth;
$y=mt_rand($height/2,$height-$textHeight); $fontfile="Elephant.ttf";//自选字体库
$text = $codeArray[$i];
imagettftext($image,$size,$angle,$x,$y,getRandColor($image),$fontfile,$text);
} // 添加雪花干扰元素
for($i=1;$i<=50;$i++) {
imagesetpixel($image,mt_rand(0,$width),mt_rand(0,$height),getRandColor($image));
} // 绘制线段干扰元素
for ($i=1;$i<=6;$i++) {
imageline($image,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$height),mt_rand(0,$width),getRandColor($image));
} // 展示
header('content-type:image/png');
imagejpeg($image); // 销毁
imagedestroy($image);
}
} (new ValidateCode(3,4))->getVerify();
php GD库简单使用和封装的更多相关文章
- php中GD库的简单使用
在php中需要图像处理的地方GD库会发挥重要的作用,php可以创建并处理包括GIF,PNG,JPEG,WBMP以及XPM在内的多种图像格式,简单的举几个例子: 1.用GD库会创建一块空白图片,然后绘制 ...
- php中GD库的一些简单使用
今天了解了一些GD库的简单使用,现在稍微做一下总结! GD库是什么?,graphic device,图像工具库,gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处 ...
- php笔记之GD库图片创建/简单验证码
燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...
- php中运用GD库实现简单验证码
昨天学习了运用php的GD库进行验证码的实现. 首先可以用phpinfo()函数看一下GD库有没有安装,我用的wampserver是自动给安装的. 主要的步骤是: 1.生成验证码图片 2.随机生成字符 ...
- php使用GD库实现图片水印和缩略图——封装成类
学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...
- 简单二次封装的Golang图像处理库:图片裁剪
简单二次封装的Golang图像处理库:图片裁剪 一.功能 Go语言下的官方图像处理库 简单封装后对jpg和png图像进行缩放/裁剪的库 二.使用说明 1.首先下载 go get -v -u githu ...
- GD库的基本信息,图像的旋转、水印、缩略图、验证码,以及图像类的封装
GD库检测 <?php phpinfo(); ?> GD库安装• Windows 使用phpstudy • Linux 编译安装 –with-gd• Linux 编译安装扩展 GD库支持的 ...
- php 简单的学习GD库绘制图片并传回给前端实现方式
1.基本的GD库绘制图片汇总 2.后台实现小案例 <?php // $img = imagecreatetruecolor(200,40); // var_dump($img); // 利用GD ...
- 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码
gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩展, windows系统下需要在php.ini中将ex ...
随机推荐
- http://www.pythontutor.com/visualize.html#mode=edit python在线检测代码
http://www.pythontutor.com/visualize.html#mode=edit
- wyy Downloader(当前置顶项目)
第一个大刀阔斧肝的 PY 项目,名称简称为 wyyDLer 公开 EXE 计划: 感觉程序应该是没什么可以完善的了,然后就顶雷([雾 ) 把 EXE 放上来好了 1.2版下载链接 应该不会出事把 Qv ...
- Codeforces 1220C. Substring Game in the Lesson
传送门 首先显然的,如果 $l$ 能移动,那么 $r$ 一定可以随便移动,如果 $l$ 不动,那么 $r$ 一定不能动 那么我们现在只要考虑 $l$ 的移动即可 考虑找到位置 $k$ 之前的最左边的最 ...
- RocketMQ吐血总结
RocketMQ吐血总结 架构 概念模型 最基本的概念模型与扩展后段概念模型 存储模型 RocketMQ吐血总结 User Guide RocketMQ是一款分布式消息中间件,最初是由阿里巴巴消息中间 ...
- Struts2对于BigDecimal类型的转换问题
Struts2对常用的数据类型如String.Integer.Double等都添加了转换器进行对应的转换操作. BigDecimal其实也算作是一种常用的数据类型,但Struts2没有对该类型设置转换 ...
- python 中if __name__ = '__main__' 的作用
python 中if __name__ = '__main__' 的作用 前言 首先我们要知道在python里面万物皆对象,模块也是对象,并且所有的模块都有一个内置属性 __name__. 一个模块的 ...
- iPhone屏幕适配,历史及现状(http://hjcapple.github.io/2014/10/10/iphone-screen.html)
iPhone屏幕适配,历史及现状 初代iPhone 2007年,初代iPhone发布,屏幕的宽高是320×480像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone 3GS的也保持不变 ...
- 3、sql 表的连接
摘自: https://blog.csdn.net/holly2008/article/details/25704471 表连接分为:CROSS JOIN.INNERT JOIN.OUTER JOIN ...
- time、date、datetime、timestamp和year
在此声明mysql数据库 时间上总共有五中表示方法:它们分别是 time.date.datetime.timestamp和year. time : “hh:mm:ss”格式表示的时间值,格式显示TIM ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...