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并报错。

语法如下:

  1. getimagesize(文件地址);

该函数支持检测,GIFJPGPNGSWFSWCPSDTIFFBMPIFFJP2JPXJB2JPCXBMWBMP 类型的图像文件。

同时,检测的文件地址,除了允许为本地路径外,还支持网络文件地址。

例如下面案例代码:

  1. <?php
  2. # 查看网络图片的信息
  3. $url = 'https://www.junphp.com/public/images/logo.png';
  4. # 打开图片
  5. $img_data = getimagesize($url);
  6. # 打印具体返回值
  7. var_dump($img_data);

返回值(一维数组)的详细说明:
键名 0 :宽度像素值
键名 1 :高度像素值
键名 mime :图片类型
注意,该函数返回的参数并不止这些,但基本有用的信息只有上面3个。

getimagesizefromstring()获取图片信息(字符串方式)

getimagesizefromstring()函数的作用,返回值,都与getimagesize()函数一样。唯一不同的是,它是需要先打开文件,获得文件内容,然后才能获取到图片信息。

语法如下:

  1. getimagesizefromstring(文件内容);

使用案例如下:

  1. <?php
  2. # 图片地址
  3. $url = 'https://www.junphp.com/public/images/logo.png';
  4. # 先打开图片获得内容
  5. $str = file_get_contents($url);
  6. # 再获得图片信息
  7. $img_data = getimagesizefromstring($str);
  8. # 打印具体返回值
  9. var_dump($img_data);
imagesx()宽度

如果你只想获得图片的宽度像素值,PHP提供了一个便捷的函数,用于高性能获取。imagesx()函数,若成功直接返回图片宽度,失败则直接报错。

语法如下:

  1. imagesx(图片路径);
imagesy()高度

如果你只想获得图片的高度像素值,PHP提供了一个便捷的函数,用于高性能获取。imagesy()函数,若成功直接返回图片宽度,失败则直接报错。

语法如下:

  1. imagesy(图片路径);
image_type_to_extension()生成图片后缀名

php提供了一个便捷函数,用于生成图片相关的后缀名;

注意,该函数并不是获取图片的类型;

语法如下:

  1. image_type_to_extension(固定参数, 后缀名是否需要带点号);

使用案例如下:

  1. <?php
  2. 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. 1.新建空白画布(指定宽高)
  2. 2.创建颜料.(红,r 绿g b,三原色组成的. 三原色由弱到强各可以选0-255之间)
  3. 3.画线,写字,画图形,填充等
  4. 4.保存/输出图片
  5. 5.销毁画布(释放内存)

A、imagecreatetruecolor()生成画布

该函数主要用于,根据指定的宽度与高度,生成一张空白画布,默认为黑色背景;成功后返回画布实例,失败后返回false

语法格式如下:

  1. imagecreatetruecolor(宽度, 高度);

B、imagecolorallocate()创建背景色

该函数主要用于,根据指定的RGB颜色参数,为画布分配颜色,成功返回颜色实例,失败后返回false

语法格式如下:

  1. imagecolorallocate(画布实例, R, G, B);

注意,RGB的颜色参数都是由0~255之间组成,具体相关知识想深入研究的同学可以直接百度得到。

C、imagefill()将背景色填充进画布

该函数主要用于,将画布与重设后的背景色合并。

语法格式如下:

  1. imagefill(画布实例, X轴, Y轴, 颜色实例);

注意,函数中提到的XY轴是相对于左上角开始,假设两个参数分别设置为0,则表示背景色完全重置。

D、image*()输出或保存画布

该函数是一个系列函数,其中*号表示的是根据图片类型,进行可变的函数名。该系列主要有一下四个函数:

  1. 1imagegif()
  2. 2imagejpeg()
  3. 3imagepng()
  4. 4imagewbmp()

分别允许以 GIFJPEGPNGWBMP 格式将图像输出到浏览器或保存到本地。

语法结构如下:

  1. image*(画布实例, 保存的图片路径, 图片清晰图);

注意,第二个参数是可选的,但不填的时候,则会将图片输出到浏览器

注意,第三个参数是可选的,默认为100,当你需要压缩图片的时候,可以将其设置为75,是不失真的情况下,最大程度的压缩。

E、imagedestroy()销毁画布

该函数主要用于,在结束画布操作后,用于销毁画布释放内存。

语法结构如下:

  1. imagedestroy(画布实例);

F、完整的演示案例

  1. <?php
  2. /*
  3. 流程步骤如下:
  4. 1.新建空白画布(指定宽高)
  5. 2.创建颜料.(红,r 绿g 蓝b,三原色组成的. 三原色由弱到强各可以选0-255之间)
  6. 3.画线,写字,画图形,填充等
  7. 4.保存/输出图片
  8. 5.销毁画布
  9. */
  10. # 1、创建画布,指定宽高
  11. $img = imagecreatetruecolor(300, 200);
  12. # 2、设置背景色,指定RGB值
  13. $bag = imagecolorallocate($img, 0, 80, 200);
  14. # 3、将背景色填充进画布
  15. imagefill($img, 0, 0, $bag);
  16. # 4、输出图片到浏览器,由于浏览器默认是html类型,所以我们在输出之前,需要使用header()函数先设置一下浏览器类型
  17. header('content-type:image/jpeg');
  18. imagepng($img);
  19. # 5、销毁画布,释放内存
  20. imagedestroy($img);

G、一些图片相关操作的函数大全(重要)

官方传送门:http://www.php.net/manual/zh/ref.image.php

老师提醒:由于图片裁切、与水印生成的功能,并不适合在入门时学习,所以该阶段的课件再不进行教学;有兴趣的同学可以百度学习。

3、本阶段综合考试

本阶段考试内容,主要包括了时间戳的运用、目录检测与创建、文件上传与限制、图片生成等4大知识点。

A、图片上传

要求:

  1. 1、检测根目录是否存在img文件夹,若不存在则创建;
  2. 2、文件上传只允许,上传jpgpng两种类型的图片,大小在100kb-800kb之间。
  3. 3、被上传的图片使用时间戳为命名格式,保存到img文件夹下。

B、简单验证码生成

要求:生成一张类似这样的图片

注意:如果单从课件的知识中,你是无法完成该试题的,请尝试阅读官方,有关图片处理函数的手册说明,并找到要点。

需要找到并学会的函数有如下几个:

  1. 1imageline(),绘制线条
  2. 2imagettftext(),添加文字(群里有该函数所需要的.ttf文件可下载)
  3. 3imagestring(),添加雪花
  4. 4rand(),随机出一个整数

注意,学会发散思维在课程之外寻找答案,是每个IT工作者都应该具备的技能哦。

全部答案:下载