PHP中GD库
PHP中GD库
一、GD库的介绍
1、GD库是什么?
Graphic Device,图像工具库,gd库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上 GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
PHP 不仅限于只产生 HTML 的输出,还可以创建及操作多种不同格式的图像文件。PHP提供了一些内置的图像信息函数,也可以使用GD函数库创建新图像或处理已有的图像。目前GD2库支持GIF、JPEG、PNG和WBMP等格式。此外还支持一些FreeType(加载操作系统中的字体)、Type1等字体库。
2、引入和检测扩展
- a. 在windows下,
php.ini里,去掉php_gd2.dll前的;,引入gd2扩展 - b. 在Linux下,需要编译时加上gd支持:
extension = php_gd2.so
# 检测扩展是否开启
# phpinfo(); -》gd
var_dump(extension_loaded('gd'));
echo '<hr/>';
var_dump(gd_info());
echo '<hr/>';
var_dump(function_exists('imagecreatetruecolor'));
二、图片处理典型流程
imagetypes()获取当前PHP所支持图像类型
1、创建画布
//创建图片资源
$image = imagecreatetruecolor(500, 500);
2、准备颜料
red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF
#$color = imagecolorallocate($image, $red, $green, $blue );
$background_color = imagecolorallocate($image, 255, 255, 255); //白色作为背景色
$back = imagecolorallocate($image, 255, 255, 255);
$border = imagecolorallocate($image, 0, 0, 0);
$red = imagecolorallocate($image, 255, 0, 0);
$green = imagecolorallocate($image, 0, 255, 0);
3、利用颜料在画布上写字或填充颜色
#imagefilledrectangle ( resource $图片资源 , int $点1x轴, int $点1y轴 , int $点2x轴 , int $点2y轴 , int $color )
- x坐标和y坐标组成一个点
- 另个点可以整成一个直线
- 直线如果不是水平或垂直的就可以组成一个矩形
imagefilledrectangle ( $image , 0, 0 , 500 , 500 , $background_color );

如果要填充整个画布的话: 点1 为x轴为画布的0位置,点1的y轴也为画布的0位置。 点2 为x轴为画布的500位置,点2的y轴也为画布的500位置。
4、画图像
- a、圆形(椭圆)
imagefilledellipse($img, 250, 250, 200, 200, $yellow);
//椭圆
imagefilledellipse($image, 200, 150, 300, 200, $yellow); - b、画矩形
imagefilledrectangle($img, 200, 200, 300, 300, $blue);
5、保存图片
#仅显示出来看
//header('content-type:image/jpeg');
// imagejpeg($image);
imagegif($image,'./hello.gif'); //保存起来
6、销毁图片资源
imagedestroy($image);
三、GD常用的函数介绍
这里面的函数会用就好,不用都背
1、新建一个真彩色图像
resource imagecreatetruecolor ( int `$width` , int `$height` )
2、为一幅图像分配颜色.失败返回-1
int imagecolorallocate ( resource `$image` , int `$red` , int `$green` , int `$blue` )
3、为一幅图像分配颜色和透明度
- 透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示-完全透明。
- 如果分配失败则返回 FALSE。
int imagecolorallocatealpha ( resource `$image` , int `$red` , int `$green` , int `$blue` , int `$alpha` )
4、画一条线
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段
5、写字
imagechar($image, 5, 50, 50, 'J', $red);//水平地画一个字符
imagecharup($image, 5, 100, 100, 'A', $green); //垂直地画一个字符
imagestring($image, 5, 200, 200, 'Jack', $blue); // 水平地画一行字符串
// 中文用 TrueType 字体向图像写入文本
imagettftext($image, 18, 0, 20, 20, $red, './font/simkai.ttf', '来啊,流浪啊,反正有...');
6、画圆弧
imagearc() 以 cx,cy(图像左上角为 0, 0)为中心在 image 所代表的图像中画一个椭圆弧。w和 h 分别指定了椭圆的宽度和高度,起始和结束点以 s 和 e 参数以角度指定。0°位于三点钟位置,以顺时针方向绘画。
$white = imagecolorallocate($img, 255, 255, 255);
// 画一个白色的圆
imagearc($img, 100, 100, 150, 150, 0, 360, $white);
//蓝色圆弧
imagearc($img, 150, 150, 150, 150, 45, 135, $blue;
7、画椭圆
在指定的坐标上画一个椭圆。
bool imageellipse ( resource `$image` , int `$cx` , int `$cy` , int `$width` , int `$height` , int `$color` )
8、画矩形
bool imagerectangle ( resource `$image` , int `$x1` , int `$y1` , int `$x2` , int `$y2` , int `$col` )
magerectangle() 用 col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。
代码示例参考-(划线)
$width = $height = 300;
$image = imagecreatetruecolor($width, $height);
# $image = imagecreatefromjpeg('./ren.jpg');
$back = imagecolorallocate($image, 255, 255, 255);
$border = imagecolorallocate($image, 0, 0, 0);
$red = imagecolorallocate($image, 255, 0, 0);
$green = imagecolorallocate($image, 0, 255, 0);
imageline($image, 0, 0, 200, 200, $red);
imageline($image, 20, 30, 220, 280, $green);
header('content-type:image/jpeg');
imagejpeg($image);
imagedestroy($image);
代码示例(三圈交叠)
$size = 300;
$image=imagecreatetruecolor($size, $size);
// 用白色背景加黑色边框画个方框
$back = imagecolorallocate($image, 255, 255, 255);
$border = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, $size - 1, $size - 1, $back);
imagerectangle($image, 0, 0, $size - 1, $size - 1, $border);
$yellow_x = 100;
$yellow_y = 75;
$red_x = 120;
$red_y = 165;
$blue_x = 187;
$blue_y = 125;
$radius = 150;
// 用 alpha 值分配一些颜色
$yellow = imagecolorallocatealpha($image, 255, 255, 0, 75);
$red = imagecolorallocatealpha($image, 255, 0, 0, 75);
$blue = imagecolorallocatealpha($image, 0, 0, 255, 75);
// 画三个交迭的圆
imagefilledellipse($image, $yellow_x, $yellow_y, $radius, $radius, $yellow);
imagefilledellipse($image, $red_x, $red_y, $radius, $radius, $red);
imagefilledellipse($image, $blue_x, $blue_y, $radius, $radius, $blue);
// 不要忘记输出正确的 header!
header('Content-type: image/png');
// 最后输出结果
imagepng($image);
imagedestroy($image);
PHP中GD库的更多相关文章
- 一起学习PHP中GD库的使用(三)
上篇文章我们已经学习了一个 GD 库的应用,那就是非常常用的制作验证码的功能.不过在现实的业务开发中,这种简单的验证码已经使用得不多了,大家会制作出更加复杂的验证码来使用.毕竟现在的各种外挂软件已经能 ...
- 一起学习PHP中GD库的使用(二)
在日常的开发过程中,GD 库最常用的功能就是帮我们对图片进行一些处理,当然,除了处理已有的图片之外,它也可以直接来画图,就像我们最常见的图片验证码.今天的内容主要就是和画图有关,所以最后我们也会做一个 ...
- 一起学习PHP中GD库的使用(一)
又到了一个大家非常熟悉的库了,对于图像图形的处理来说,GD 库是 PHPer 们绕不过去的一道坎.从很早很早的 CMS 或者 Discuz 时代,各类开源软件在安装的时候就会明确地指出 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库的配置,解决dedecms安装中GD不支持问题
了解gd库 在php中,使用gd库来对图像进行操作,gd库是一个开放的动态创建的图像的源代码公开的函数库,可以从官方网站http://www.boutell.com/gd处下载.目前,gd库支持gif ...
- PHP中GD库安装
安装gd库扩展不能像其他扩展安装一样,直接./configure --prefix=/xxx 还需要激活png,jpeg,字库等支持 ./configure --prefix=/xxx --with- ...
- 【代码学习】PHP中GD库的使用
PHP--GD库 ================================================ 一.支持: 需要php支持GD库 二.作用: 验证码.水印.缩放等 三.绘画步骤: ...
- PHP中GD库是做什么用的? PHP GD库介绍11111111
什么是gd库? gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...
- 关于织梦系统不支持php中GD库的问题
大多数人在显成的PHP的CMS时,如织梦CMS,安装的时候不支持GD库,就导致整个网站的验证码不显示,以下是个人对此类问题的解决办法: 1.首先找到wamp的安装目录,找到PHP的文件夹,打开php. ...
随机推荐
- 你以为这是MacOS ,其实这是我的 Linux 系统 Manjaro!
对于如何将你的 Manjaro 系统美化成 MacOS 你需要做以下几件事情: 1.安装 WhiteSur-Gtk-theme 主题. 2.安装 Plank 软件. 3.安装 vala-panel-a ...
- vue+elementUI+WebSocket接收后台实时消息推送
vue+elementUI+WebSocket接收后台实时消息推送 https://blog.csdn.net/weixin_40888956/article/details/105971432?ut ...
- Qt做大型软件开发技术选型Part2:Qt调用C#编写的COM组件
Qt做大型软件开发技术选型Part2:Qt调用C#编写的COM组件 之前有提到过我们项目部现在正在用Qt重构一个大型软件,现在的情景是这样的: 原先的软件是通过一个C++(CLR)的主程序,调用各种用 ...
- 扒一扒ProcessOn 新功能——一键编号、图形组合、左侧导航、画布水印、表格组件
思维导图.一键编号 思维导图新增 多种全新主题风格,让您的创作赏心悦目 思维导图新增 一键编号 功能 流程图.图形组合 自定义组合图形功能:新增流程图 我的图形 功能,用户可以设置或者上传自己的图形 ...
- zzuli1895: 985的0-1串难题
//解法:用二分查找,如果当前位置是'1',则查找比这个位置多k+1个零的位置,如果当前位置是'0',则查找比当前位置多k个零的位置, 注意要在末尾添个最大的值 #include<iostrea ...
- Liunx快捷命令(别名)与快捷方式(软/硬链接)
一.快捷命令(别名)-临时生效1.命令:alias 别名='原命令' 2.举例:给检查防火墙的命令设置别名 [root@localhost ~]# alias fhq='firewall-cmd -- ...
- JPA + MySQL 开发总结
本文为博主原创,转载请注明出处: org.springframework.data.jpa 是 Spring Data JPA 框架中的一个包,用于简化与 JPA(Java Persistence A ...
- CSS - 使图片自适应
img { height: 100%; object-fit: cover; }
- JMS微服务开发示例(三)使用分布式锁和编写定时任务
分布式锁 在Controller当中,提供了分布式锁的功能,代码如下: class HelloworldController : MicroServiceControllerBase { static ...
- Django数据导入导出神器django-import-export使用
前言 Django以快速开发闻名,但是如果处理数据的导出导入还需要自己写脚本,那就有违"Python之禅"了-- 而且导数据通常需要不同的格式,Excel.csv.json等,每种 ...