1、图片处理
在PHP中,图片处理主要囊括了:图片生成、图片压缩、图片裁切、图片信息获取等四大类操作;
并且PHP的图片处理,主要依赖于GD
库(PHP底层扩展)。
A、gd_info()检测GD库的支持类型
注意:该函数主要是用于检测,GD库支持处理的图片类型,并不是用于检测GD库是否已经安装,如果该函数报错,则表示并未安装GD库扩展。
该函数的返回值是一个一维数组,各个数组键名的对应说明如下:
键名 | 含义 |
---|---|
GD Version | 描述了安装的 libgd 的版本。 |
Freetype Support | 如果安装了 Freetype 支持则为 TRUE。 |
Freetype Linkage | 描述了 Freetype 连接的方法。取值可能为:’with freetype’, ‘with TTF library’ 和 ‘with unknown library’。本单元仅再Freetype Support 的值为 TRUE 时有定义。 |
T1Lib Support | 上述如果包含有 T1Lib 支持则为 TRUE。 |
GIF Read Support | 上述如果包含有读取 GIF 图像的支持则为 TRUE。 |
GIF Create Support | 上述如果包含有创建 GIF 图像的支持则为 TRUE。 |
JPG Support | 上述如果包含有 JPG 支持则为 TRUE。 |
PNG Support | 上述如果包含有 PNG 支持则为 TRUE。 |
WBMP Support | 上述如果包含有 WBMP 支持则为 TRUE。 |
XBM Support | 上述如果包含有 XBM 支持则为 TRUE。 |
B、图片信息获取
主要是获取图片的类型、高度、宽度等信息
getimagesize()获取图片信息(文件方式)
getimagesize()
函数用于获取图像大小及相关信息,成功返回一个一维数组,失败则返回false
并报错。
语法如下:
getimagesize(文件地址);
该函数支持检测,GIF
,JPG
,PNG
,SWF
,SWC
,PSD
,TIFF
,BMP
,IFF
,JP2
,JPX
,JB2
,JPC
,XBM
或 WBMP
类型的图像文件。
同时,检测的文件地址,除了允许为本地路径外,还支持网络文件地址。
例如下面案例代码:
<?php
# 查看网络图片的信息
$url = 'https://www.junphp.com/public/images/logo.png';
# 打开图片
$img_data = getimagesize($url);
# 打印具体返回值
var_dump($img_data);
返回值(一维数组)的详细说明:
键名 0
:宽度像素值
键名 1
:高度像素值
键名 mime
:图片类型
注意,该函数返回的参数并不止这些,但基本有用的信息只有上面3个。
getimagesizefromstring()获取图片信息(字符串方式)
getimagesizefromstring()
函数的作用,返回值,都与getimagesize()
函数一样。唯一不同的是,它是需要先打开文件,获得文件内容,然后才能获取到图片信息。
语法如下:
getimagesizefromstring(文件内容);
使用案例如下:
<?php
# 图片地址
$url = 'https://www.junphp.com/public/images/logo.png';
# 先打开图片获得内容
$str = file_get_contents($url);
# 再获得图片信息
$img_data = getimagesizefromstring($str);
# 打印具体返回值
var_dump($img_data);
imagesx()宽度
如果你只想获得图片的宽度像素值,PHP提供了一个便捷的函数,用于高性能获取。imagesx()
函数,若成功直接返回图片宽度,失败则直接报错。
语法如下:
imagesx(图片路径);
imagesy()高度
如果你只想获得图片的高度像素值,PHP提供了一个便捷的函数,用于高性能获取。imagesy()
函数,若成功直接返回图片宽度,失败则直接报错。
语法如下:
imagesy(图片路径);
image_type_to_extension()生成图片后缀名
php提供了一个便捷函数,用于生成图片相关的后缀名;
注意,该函数并不是获取图片的类型;
语法如下:
image_type_to_extension(固定参数, 后缀名是否需要带点号);
使用案例如下:
<?php
echo image_type_to_extension(IMAGETYPE_PNG, true);
固定参数主要有以下这些:
固定参数 | 对应后缀 |
---|---|
IMAGETYPE_GIF | gif |
IMAGETYPE_JPEG | jpg |
IMAGETYPE_PNG | png |
IMAGETYPE_SWF | swf |
IMAGETYPE_PSD | psd |
IMAGETYPE_BMP | bmp |
IMAGETYPE_TIFF_II | tiff |
IMAGETYPE_TIFF_MM | tiff |
IMAGETYPE_JPC | jpc |
IMAGETYPE_JP2 | jp2 |
IMAGETYPE_JPX | jpf |
IMAGETYPE_JB2 | jb2 |
IMAGETYPE_SWC | swc |
IMAGETYPE_IFF | aiff |
IMAGETYPE_WBMP | wbmp |
IMAGETYPE_XBM | xbm |
2、图片生成
php中,生成一张图片的流程,主要由以下步骤组成:
1.新建空白画布(指定宽高)
2.创建颜料.(红,r 绿g 蓝b,三原色组成的. 三原色由弱到强各可以选0-255之间)
3.画线,写字,画图形,填充等
4.保存/输出图片
5.销毁画布(释放内存)
A、imagecreatetruecolor()生成画布
该函数主要用于,根据指定的宽度与高度,生成一张空白画布,默认为黑色背景;成功后返回画布实例,失败后返回false
。
语法格式如下:
imagecreatetruecolor(宽度, 高度);
B、imagecolorallocate()创建背景色
该函数主要用于,根据指定的RGB颜色参数,为画布分配颜色,成功返回颜色实例,失败后返回false
。
语法格式如下:
imagecolorallocate(画布实例, R, G, B);
注意,RGB的颜色参数都是由0~255之间组成,具体相关知识想深入研究的同学可以直接百度得到。
C、imagefill()将背景色填充进画布
该函数主要用于,将画布与重设后的背景色合并。
语法格式如下:
imagefill(画布实例, X轴, Y轴, 颜色实例);
注意,函数中提到的XY轴是相对于左上角开始,假设两个参数分别设置为0
,则表示背景色完全重置。
D、image*()输出或保存画布
该函数是一个系列函数,其中*号表示的是根据图片类型,进行可变的函数名。该系列主要有一下四个函数:
1、imagegif()
2、imagejpeg()
3、imagepng()
4、imagewbmp()
分别允许以 GIF
、JPEG
、PNG
和 WBMP
格式将图像输出到浏览器或保存到本地。
语法结构如下:
image*(画布实例, 保存的图片路径, 图片清晰图);
注意,第二个参数是可选的,但不填的时候,则会将图片输出到浏览器
注意,第三个参数是可选的,默认为100
,当你需要压缩图片的时候,可以将其设置为75
,是不失真的情况下,最大程度的压缩。
E、imagedestroy()销毁画布
该函数主要用于,在结束画布操作后,用于销毁画布释放内存。
语法结构如下:
imagedestroy(画布实例);
F、完整的演示案例
<?php
/*
流程步骤如下:
1.新建空白画布(指定宽高)
2.创建颜料.(红,r 绿g 蓝b,三原色组成的. 三原色由弱到强各可以选0-255之间)
3.画线,写字,画图形,填充等
4.保存/输出图片
5.销毁画布
*/
# 1、创建画布,指定宽高
$img = imagecreatetruecolor(300, 200);
# 2、设置背景色,指定RGB值
$bag = imagecolorallocate($img, 0, 80, 200);
# 3、将背景色填充进画布
imagefill($img, 0, 0, $bag);
# 4、输出图片到浏览器,由于浏览器默认是html类型,所以我们在输出之前,需要使用header()函数先设置一下浏览器类型
header('content-type:image/jpeg');
imagepng($img);
# 5、销毁画布,释放内存
imagedestroy($img);
G、一些图片相关操作的函数大全(重要)
官方传送门:http://www.php.net/manual/zh/ref.image.php
老师提醒:由于图片裁切、与水印生成的功能,并不适合在入门时学习,所以该阶段的课件再不进行教学;有兴趣的同学可以百度学习。
3、本阶段综合考试
本阶段考试内容,主要包括了时间戳的运用、目录检测与创建、文件上传与限制、图片生成等4大知识点。
A、图片上传
要求:
1、检测根目录是否存在img文件夹,若不存在则创建;
2、文件上传只允许,上传jpg、png两种类型的图片,大小在100kb-800kb之间。
3、被上传的图片使用时间戳为命名格式,保存到img文件夹下。
B、简单验证码生成
要求:生成一张类似这样的图片
注意:如果单从课件的知识中,你是无法完成该试题的,请尝试阅读官方,有关图片处理函数的手册说明,并找到要点。
需要找到并学会的函数有如下几个:
1、imageline(),绘制线条
2、imagettftext(),添加文字(群里有该函数所需要的.ttf文件可下载)
3、imagestring(),添加雪花
4、rand(),随机出一个整数
注意,学会发散思维在课程之外寻找答案,是每个IT工作者都应该具备的技能哦。
全部答案:下载