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. 你有一份Rx编程秘籍请签收

    一.背景 在学习Rx编程的过程中,理解Observable这个概念至关重要,常规学习过程中,通常需要进行多次"碰壁"才能逐渐"开悟".这个有点像小时候学骑自行车 ...

  2. 实战指南 | Serverless 架构下的应用开发

    作者 | 刘宇.田初东.卢萌凯.王仁达 UC Berkeley认为Serverless架构的出现过程类似于40多年前从汇编语言转向高级语言的过程,在未来Serverless架构的使用会飙升,或许服务器 ...

  3. 【驱动】I2C驱动分析(一)-I2C驱协议简介

    什么是 I²C I²C 叫集成电路总线 它是一种串行通信接口,具有双向两线同步串行总线,通常由两根线组成--SDA(串行数据线)和SCL(串行时钟线)和上拉电阻. 它们用于需要许多不同部件(例如传感器 ...

  4. C语言常用字符串操作函数整理(详细全面)

    目录 字符串相关 1.char *gets(char *s); #include<stdio.h> 2.char *fgets(char *s, intsize, FILE *stream ...

  5. python进阶(2)--列表

    文档目录:一.访问列表元素二.更新列表三.删除元素四.列表排序五.len()与range()/list()六.创建一个包含1-10平方的列表七.复制列表两种方式八.元组:不可变的列表 -------- ...

  6. 使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)

    前言 ELK 是指 Elasticsearch.Logstash 和 Kibana 这三个开源软件的组合. Elasticsearch 是一个分布式的搜索和分析引擎,用于日志的存储,搜索,分析,查询. ...

  7. Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作

    本文为博主原创,转载请注明出处: 1. 使用 ThreadPoolTaskExecutor  封装自定义配置的线程池Bean ThreadPoolTaskExecutor 是Spring 中封装的一个 ...

  8. C++中vector容器详解

    参考链接:https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html 一.什么是vector? 向量(Vector)是一个封装了 ...

  9. 【SHELL】获取脚本输入参数

    参数获取 EXEC_PARAMS=(${@:index}) 示例 ./do.sh test a b c d e f EXEC_PARAMS=(${@:0}) ./do.sh test a b c d ...

  10. 【SHELL】在指定格式的文件中查找字符串

    在指定格式的文件中查找字符串 grep -nr "string" --include=*.{c,cpp,h} 在排除指定格式的文件中查找字符串 grep -nr "str ...