IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 一起学习PHP中GD库的使用(一) -> 正文阅读

[PHP知识库]一起学习PHP中GD库的使用(一)

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

又到了一个大家非常熟悉的库了,对于图像图形的处理来说,GD 库是 PHPer 们绕不过去的一道坎。从很早很早的 CMS 或者 Discuz 时代,各类开源软件在安装的时候就会明确地指出 GD 库是它们必备的一个扩展。当然,在现在的 PHP 版本中,相信大家也不会在编译的时候忽略掉这个库。不管你是为图片加水印、生成缩略图还是制作验证码图片,都离不开 GD 库的身影。

当然,我们还是由浅入深地学习一些 GD 库中的常用或好玩的函数。

当前环境中的 GD 库信息

首先,我们可以查看下当前 PHP 环境中的 GD 库版本及支持的图片格式信息。

var_dump(gd_info());
//?array(13)?{
//?????["GD?Version"]=>
//?????string(26)?"bundled?(2.1.0?compatible)"
//?????["FreeType?Support"]=>
//?????bool(true)
//?????["FreeType?Linkage"]=>
//?????string(13)?"with?freetype"
//?????["GIF?Read?Support"]=>
//?????bool(true)
//?????["GIF?Create?Support"]=>
//?????bool(true)
//?????["JPEG?Support"]=>
//?????bool(true)
//?????["PNG?Support"]=>
//?????bool(true)
//?????["WBMP?Support"]=>
//?????bool(true)
//?????["XPM?Support"]=>
//?????bool(false)
//?????["XBM?Support"]=>
//?????bool(true)
//?????["WebP?Support"]=>
//?????bool(true)
//?????["BMP?Support"]=>
//?????bool(true)
//?????["JIS-mapped?Japanese?Font?Support"]=>
//?????bool(false)
//???}

gd_info() 函数可以查看到当前 GD 库的版本信息,其它字段就是各种图片模式的支持情况,可以看到在我的系统环境中,除了 XPM 这种格式不支持外,其它各种图片格式都是正常支持的。最后一个是日文字体的支持,我们当前环境中也是没有的。

获取图片基本信息

getimagesize(),获取图片信息的这个函数,从名字上看是获取图片大小的一个函数但也包含一些其它的信息,而且这个函数其实和 GD 库没什么太大的关系,也就是说不需要 GD 库的扩展其实这个函数也是可以使用的。

var_dump(getimagesize("../img/1.png"));
//?array(6)?{
//?????[0]=>
//?????int(150)
//?????[1]=>
//?????int(150)
//?????[2]=>
//?????int(3)
//?????[3]=>
//?????string(24)?"width="150"?height="150""
//?????["bits"]=>
//?????int(8)
//?????["mime"]=>
//?????string(9)?"image/png"
//???}

返回的结果其实非常简单,0 和 1 分别就是图片的宽高,2 是图片的类型,之前的文章就讲过它对应的就是 IMAGETYPE_ 常量中对应的图片类型。3 是文字形式的图片宽高,可以直接用于 img 标签中,可以看出来,PHP 真的就是为了 web 而生的语言啊,连图片大小获取的函数都要带个这样的属性回来。bits 就是图片的 颜色比特位数 。mime 则是图片的 MIME 类型了。

另外,getimagesize() 函数还有第二个参数,这是一个引用类型的参数,它将以一个关联数组返回不同的 JPG APP 标识。也就是说,它也是针对 JPG 相关的图片获取一些额外的信息,其实就有点像上篇文章学习过的 EXIF 里面的信息。

var_dump(getimagesize("../img/2.jpg",?$info));
//?array(7)?{
//?????[0]=>
//?????int(300)
//?????[1]=>
//?????int(244)
//?????[2]=>
//?????int(2)
//?????[3]=>
//?????string(24)?"width="300"?height="244""
//?????["bits"]=>
//?????int(8)
//?????["channels"]=>
//?????int(3)
//?????["mime"]=>
//?????string(10)?"image/jpeg"
//???}

var_dump($info);
//?array(1)?{
//?????["APP0"]=>
//?????string(14)?"JFIF��"
//???}

此外,我们如果是 JPG 图片的话,还会多返回一个 channels 属性,表示的是如果图片是 RBG 格式的,返回的就是 3 ,如果是 CMYK 格式的,返回的就是 4 。

我们还可以使用 getimagesize() 获得远程文件的信息。

var_dump(getimagesize("https://upload-images.jianshu.io/upload_images/1074666-8df66a94d61cac74.png?imageMogr2/auto-orient/strip|imageView2/2/w/374/format/webp"));
//?array(6)?{
//?????[0]=>
//?????int(374)
//?????[1]=>
//?????int(617)
//?????[2]=>
//?????int(18)
//?????[3]=>
//?????string(24)?"width="374"?height="617""
//?????["bits"]=>
//?????int(8)
//?????["mime"]=>
//?????string(10)?"image/webp"
//???}

除了直接操作图片文件之外,我们还可以直接从字符串中获得图片的信息。不过这些字符串一般也都是读取到的图片文件的二进制信息。你直接来一句真正的 Hello World 之类的字符串那打死它也解析不出来什么图片内容的。

$data?=?file_get_contents('../img/1.png');
var_dump(getimagesizefromstring($data));
//?array(6)?{
//?????[0]=>
//?????int(150)
//?????[1]=>
//?????int(150)
//?????[2]=>
//?????int(3)
//?????[3]=>
//?????string(24)?"width="150"?height="150""
//?????["bits"]=>
//?????int(8)
//?????["mime"]=>
//?????string(9)?"image/png"
//???}

获得图片的一些信息

我们可以通过图片的类型来获取文件的扩展名,这个类型常量也是 IMAGETYPE_ 类型的。

var_dump(image_type_to_extension(IMAGETYPE_PNG));?//?string(4)?".png"
var_dump(image_type_to_extension(IMAGETYPE_JPEG,?FALSE));?//?string(4)?"jpeg"

image_type_to_extension() 函数有第二个参数,如果设置为 false 的话,就不会加上那个 . 。

var_dump(image_type_to_mime_type(IMAGETYPE_PNG));?//?string(9)?"image/png"
var_dump(image_type_to_mime_type(IMAGETYPE_JPEG));?//?string(10)?"image/jpeg"

同样地,也有 image_type_to_mime_type() 这个函数来获得图片的 MIME 信息内容。另外,还有一个函数可以获得当前系统中所支持的图片类型都有哪些。

var_dump(imagetypes());?//?int(111)

额,很奇怪吧,怎么只返回了一个 111 ?其实它是保存的二进制图片支持信息,比如如果我们想知道当前系统中有没有 PNG 图片的支持,就可以这样使用:

var_dump(imagetypes()?&?IMAGETYPE_PNG);?//?int(3)

和 IMAGETYPE_PNG 与之后的结果就是 IMAGETYPE_PNG 本身的值,这就说明当前系统中是支持这个图片类型的操作的。

小例子:创建一张自己的图片

最后,我们再来看一个小例子,其实就是利用 GD 库中的这些函数来创建一张简单的小图片。

$im?=?@imagecreate(100,?50)?or?die("Cannot?Initialize?new?GD?image?stream");
$background_color?=?imagecolorallocate($im,?255,?255,?255);
$text_color?=?imagecolorallocate($im,?233,?14,?91);
imagestring($im,?1,?5,?5,??"Test?测试",?$text_color);
imagepng($im,?'../img/test.png');
imagedestroy($im);

其实每个函数的内容都很好理解,函数名就已经写得很清楚了。当然,我们后面的文章中将详细地再学习一次。这个最终生成的图片中,中文也是乱码的,不过它已经是可以当做一个图片验证码来使用了,是不是非常地简单?

总结

今天的内容不多,也都是比较基础浅显的一些函数的使用。当然,这只是开头的第一篇文章,GD 库不是一个简单的小扩展,它里面的内容非常多,能够实现的功能也非常复杂,不要走开,持续关注哦!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202012/source/1.一起学习PHP中GD库的使用(一).php

参考文档:

https://www.php.net/manual/zh/book.image.php

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:22:59  更:2021-07-31 16:25:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 3:18:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码