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 中从坐标 x1y1x2y2(图像左上角为 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()cxcy(图像左上角为 0, 0)为中心在 image 所代表的图像中画一个椭圆弧。wh 分别指定了椭圆的宽度和高度,起始和结束点以 se 参数以角度指定。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库的更多相关文章

  1. 一起学习PHP中GD库的使用(三)

    上篇文章我们已经学习了一个 GD 库的应用,那就是非常常用的制作验证码的功能.不过在现实的业务开发中,这种简单的验证码已经使用得不多了,大家会制作出更加复杂的验证码来使用.毕竟现在的各种外挂软件已经能 ...

  2. 一起学习PHP中GD库的使用(二)

    在日常的开发过程中,GD 库最常用的功能就是帮我们对图片进行一些处理,当然,除了处理已有的图片之外,它也可以直接来画图,就像我们最常见的图片验证码.今天的内容主要就是和画图有关,所以最后我们也会做一个 ...

  3. 一起学习PHP中GD库的使用(一)

    又到了一个大家非常熟悉的库了,对于图像图形的处理来说,GD 库是 PHPer 们绕不过去的一道坎.从很早很早的 CMS 或者 Discuz 时代,各类开源软件在安装的时候就会明确地指出 GD 库是它们 ...

  4. php中GD库的简单使用

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

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

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

  6. (转)php中GD库的配置,解决dedecms安装中GD不支持问题

    了解gd库 在php中,使用gd库来对图像进行操作,gd库是一个开放的动态创建的图像的源代码公开的函数库,可以从官方网站http://www.boutell.com/gd处下载.目前,gd库支持gif ...

  7. PHP中GD库安装

    安装gd库扩展不能像其他扩展安装一样,直接./configure --prefix=/xxx 还需要激活png,jpeg,字库等支持 ./configure --prefix=/xxx --with- ...

  8. 【代码学习】PHP中GD库的使用

    PHP--GD库 ================================================ 一.支持: 需要php支持GD库 二.作用: 验证码.水印.缩放等 三.绘画步骤: ...

  9. PHP中GD库是做什么用的? PHP GD库介绍11111111

    什么是gd库?    gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...

  10. 关于织梦系统不支持php中GD库的问题

    大多数人在显成的PHP的CMS时,如织梦CMS,安装的时候不支持GD库,就导致整个网站的验证码不显示,以下是个人对此类问题的解决办法: 1.首先找到wamp的安装目录,找到PHP的文件夹,打开php. ...

随机推荐

  1. VScode 中 Code Runner 插件乱码问题

    安装好,Code Runner 插件,可以很方便的运行多种语言的文本,但是提示和输出经常会报错 进入 File - > Preference -> setting, 然后在输入框搜索 se ...

  2. 记一次 .NET某道闸收费系统 内存溢出分析

    一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序几天内存就要爆一次,不知道咋回事,找不出原因,让我帮忙看一下,这种问题分析dump是最简单粗暴了,拿到dump后接下来就是一顿分析. 二:Win ...

  3. 十一、docker的容器互联

    系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...

  4. u-swipe-action 宽度计算的延迟导致组件加载时内部样式错误

    https://toscode.gitee.com/umicro/uView/issues/I1Y50J 左图为电脑显示效果,右图为app显示效果. 原因:u-swipe-action 宽度计算的延迟 ...

  5. uni-app滚动加载下一页

    https://www.bilibili.com/video/BV1BJ411W7pX?p=39

  6. 如何使用photoshop修改图片的像素大小(分辨率)

    查看原始图片的分辨率如下:640*399

  7. OpenShift image registry 访问镜像

    1. OpenShift 内部 image registry Openshift 自带内部 image registry,可通过 podman 实现 image 的 pull 和 push 操作. 对 ...

  8. 每天学五分钟 Liunx | 有趣的 log

    说明:看 systemd log 的时候发现了一段有意思的打印,不太明白为什么会这样,贴出来与朋友们分享,欢迎知道的朋友们说明下,非常感谢.   问题描述:服务启动时,会执行 python 脚本,该脚 ...

  9. python · matplotlib | 如何绘制子图

    代码: import matplotlib.pyplot as plt import matplotlib matplotlib.rc("font",family='MicroSo ...

  10. 【C/C++】宏参数多对一和宏部分替换

    宏参数多对一:使用分号分隔多参数 宏部分替换:替换需要转换的再与后续宏接续 #include <stdio.h> #define _MESS_FAILED() printf("% ...