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库简单使用和封装的更多相关文章

  1. php中GD库的简单使用

    在php中需要图像处理的地方GD库会发挥重要的作用,php可以创建并处理包括GIF,PNG,JPEG,WBMP以及XPM在内的多种图像格式,简单的举几个例子: 1.用GD库会创建一块空白图片,然后绘制 ...

  2. php中GD库的一些简单使用

    今天了解了一些GD库的简单使用,现在稍微做一下总结! GD库是什么?,graphic device,图像工具库,gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处 ...

  3. php笔记之GD库图片创建/简单验证码

    燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...

  4. php中运用GD库实现简单验证码

    昨天学习了运用php的GD库进行验证码的实现. 首先可以用phpinfo()函数看一下GD库有没有安装,我用的wampserver是自动给安装的. 主要的步骤是: 1.生成验证码图片 2.随机生成字符 ...

  5. php使用GD库实现图片水印和缩略图——封装成类

    学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...

  6. 简单二次封装的Golang图像处理库:图片裁剪

    简单二次封装的Golang图像处理库:图片裁剪 一.功能 Go语言下的官方图像处理库 简单封装后对jpg和png图像进行缩放/裁剪的库 二.使用说明 1.首先下载 go get -v -u githu ...

  7. GD库的基本信息,图像的旋转、水印、缩略图、验证码,以及图像类的封装

    GD库检测 <?php phpinfo(); ?> GD库安装• Windows 使用phpstudy • Linux 编译安装 –with-gd• Linux 编译安装扩展 GD库支持的 ...

  8. php 简单的学习GD库绘制图片并传回给前端实现方式

    1.基本的GD库绘制图片汇总 2.后台实现小案例 <?php // $img = imagecreatetruecolor(200,40); // var_dump($img); // 利用GD ...

  9. 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码

    gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩展, windows系统下需要在php.ini中将ex ...

随机推荐

  1. python-day17(正式学习)

    目录 包 一.什么是包? 二.为什么要有包? 三.如何用包? 3.1 模块和包 3.2 扩展模块功能 3.3 修改__init__.py文件 绝对导入和相对导入 注意事项 模块不来总结了,直接去htt ...

  2. Python 集合的各种操作 数学运算 关系操作 增删改查 生成式

    # 集合是无序的 是可变的 不能重复 允许数学运算 分散存储 # 创建# collegel = {'哲学','经济学','法学','教育学'}## # {'教育学', '经济学', '法学', '哲学 ...

  3. PostgreSQL-pg_ctl

    命令简介 pg_ctl 启动.关闭.重启 postgres pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p pat ...

  4. NEO4J亿级数据导入导出以及数据更新

    1.添加配置 apoc.export.file.enabled=true apoc.import.file.enabled=true dbms.directories.import=import db ...

  5. npm学习(十一)之package-lock.json

    package-lock.json 描述 对于npm修改node_modules树或package.json的任何操作,都会自动生成package.json,它描述生成的确切树,以便后续安装能够生成相 ...

  6. k8s第一个脚本:hello world

    1.hello-world-pod.yaml 脚本: # cat hello-world-pod.yaml apiVersion: v1 kind: Pod metadata: name: hello ...

  7. vue父组件调用子组件方法、父组件向子组件传值、子组件向父组件传值

      一.父组件调用子组件方法 父组件代码  parent.vue <template> <div> <button @click="parentFun" ...

  8. 区块链共识算法|RAFT和PBFT的区别

    这里有个很形象的比喻: 一个团队一定会有一个老大和普通成员.对于 raft 算法,共识过程就是:只要老大还没挂,老大说什么,我们(团队普通成员)就做什么,坚决执行.那什么时候重新老大呢?只有当老大挂了 ...

  9. java高并发实战Netty+协程(Fiber)|系列1|事件驱动模式和零拷贝

    今天开始写一些高并发实战系列. 本系列主要讲两大主流框架: Netty和Quasar(java纤程库) 先介绍netty吧,netty是业界比较成熟的高性能异步NIO框架. 简单来说,它就是对NIO2 ...

  10. hash_table

    #include <ext/pb_ds/hash_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using name ...