PHP笔记之图像操作以及绘制图像验证码

目录

图像处理概述

1、开启GD2图像扩展库

2、查看图像扩展库GD2是否开启

3、创建图像的大致步骤

4、画布坐标系说明

创建图像和销毁图像

1、创建基于已有图像的图像imagecreatefromjpeg()

2、创建空画布图像imagecreatetruecolor()

3、销毁图像资源imagedestroy()

图像操作

1、为图像分配颜色imagecolorallocate()

2、输出图像到浏览器或保存文件imagejpeg()

3、水平地画一行字符串imagestring()

4、获取画布的宽度和高度

5、获取内置字体的宽度和高度

7、画一矩形并填充

8、画一个单一像素

实例:图像验证码

1、绘制图像验证码

2、产生一个指定范围的数组range()

3、合并数组array_merge()

4、从数组中随机取出一个或多个单元(下标)

5、生成更好的随机数

实例:往图像上写入一行汉字

实例:制作图像水印效果

实例:生成图像缩略图


主要内容:

PHP笔记之图像操作以及绘制图像验证码

图像处理概述

1、开启GD2图像扩展库

  • PHP不仅限于只产生HTML的输出,还可以创建与操作多种不同格式的图像文件。PHP提供了一些内置的图像处理函数,也可以使用GD函数库创建新图像或处理已有的图像。目前GD2库支持JPEG、PNG和WBMP格式。
  • GD扩展用于动态创建图片,使用C语言编写,开放源代码,现在的版本是2.0,所以称为GD2。
  • 开启GD2扩展库:将php.ini中extension=php_gd2.dll选项前的分号去掉,重启。

PHP笔记之图像操作以及绘制图像验证码

2、查看图像扩展库GD2是否开启

PHP笔记之图像操作以及绘制图像验证码

3、创建图像的大致步骤

在PHP中创建一个图像,大致需要四个步骤:

(1)创建画布:创建一个画布,以后的操作都基于此画布操作;

(2)绘制图形:在画布上绘制图像轮廓或输入文本;

(3)输出图像:也可以另存为;

(4)释放资源:释放图像占用的内存资源。

PHP笔记之图像操作以及绘制图像验证码

4、画布坐标系说明

下图说明了画布的坐标系。坐标原点位于画布左上角,以像素为单位。

PHP笔记之图像操作以及绘制图像验证码

创建图像和销毁图像

1、创建基于已有图像的图像imagecreatefromjpeg()

  • 描述:由文件或 URL 创建一个新图象。
  • 语法:resource imagecreatefrompng ( string $filename )
  • 参数:$filename为图像的完整路径。
  • 返回:成功后返回图象资源,失败后返回 FALSE 。
  • 提示:imagecreatefromjpeg()和imagecreatefromgif()语法与该函数一样

PHP笔记之图像操作以及绘制图像验证码

2、创建空画布图像imagecreatetruecolor()

  • 描述:新建一个真彩色图像,支持24位色,即RGB(256,256,256)。
  • 语法:resource imagecreatetruecolor ( int $width , int $height )
  • 参数:$width图像宽度;$height图像高度;
  • 返回:成功后返回图象资源,失败后返回 FALSE 。

PHP笔记之图像操作以及绘制图像验证码  PHP笔记之图像操作以及绘制图像验证码

3、销毁图像资源imagedestroy()

  • 描述:销毁一图像。释放与 image图像标识符关联的内存。
  • 语法:bool imagedestroy ( resource $image )
  • 参数:$image为由imagecreatetruecolor()创建的图像标识符。

PHP笔记之图像操作以及绘制图像验证码

图像操作

1、为图像分配颜色imagecolorallocate()

  • 语法:int imagecolorallocate(resource $image,int $red,int $green,int $blue)
  • 参数:$image图像资源标识符;
  • 提示:第一次对 imagecolorallocate()的调用会给图像填充背景色

PHP笔记之图像操作以及绘制图像验证码

PHP笔记之图像操作以及绘制图像验证码

2、输出图像到浏览器或保存文件imagejpeg()

  • 描述:以 JPG/GIF/PNG 格式将图像输出到浏览器或文件
  • 语法:bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )
  • 参数:
    • $filename,将创建的图像保存到文件;如果省略,则直接在浏览器输出。
    • 如果要省略这个参数而提供 quality 参数,使用NULL。
    • quality 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认的质量值(大约 75)。
  • 提示:imagegif()、imagepng(),与imagejpeg()格式一样,但没有第3个参数

PHP笔记之图像操作以及绘制图像验证码

PHP笔记之图像操作以及绘制图像验证码

3、水平地画一行字符串imagestring()

  • 描述:水平地画一行字符串
  • 语法:bool imagestring(resource $img,int $font,int $x,int $y,string $s,int $col)
  • 参数:
    • $img 图像资源;
    • $font字体大小,取值1、2、3、4、5,使用内置字体;
    • $x , $y 绘制字符串的开始坐标,一般在字符串左上角;
    • $s 代表要绘制的一行字符串;
    • $col 代表文本颜色。
    • $s,代表一行字符串;$col,代表文本颜色;

PHP笔记之图像操作以及绘制图像验证码

4、获取画布的宽度和高度

  • 宽度:int imagesx ( resource $image )
  • 高度:int imagesy ( resource $image )

5、获取内置字体的宽度和高度

  • 描述:返回指定字体一个字符宽度或高度的像素值。
  • 字体宽度:int imagefontwidth ( int $font )
  • 字体高度:int imagefontheight ( int $font )
  • 提示:$font为字体大小,取值1-5,最大为5。

PHP笔记之图像操作以及绘制图像验证码

PHP笔记之图像操作以及绘制图像验证码

7、画一矩形并填充

  • 描述:画一矩形并填充
  • 语法:bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
  • 参数:
    • $x1 , $y1 左上角坐标;
    • $x2 , $y2 右上角坐标;
    • $color 填充背景色。

PHP笔记之图像操作以及绘制图像验证码

8、画一个单一像素

  • 描述:画一个单一像素
  • 语法:bool imagesetpixel ( resource $image , int $x , int $y , int $color )
  • 说明:imagesetpixel() 在 image图像中用 color颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。

PHP笔记之图像操作以及绘制图像验证码

实例:图像验证码

1、绘制图像验证码

PHP笔记之图像操作以及绘制图像验证码

PHP笔记之图像操作以及绘制图像验证码

PHP笔记之图像操作以及绘制图像验证码

2、产生一个指定范围的数组range()

  • 描述:建立一个包含指定范围单元的数组
  • 语法:array range ( mixed $start , mixed $limit [, number $step = 1 ] )
  • 参数:
    • $start 指定范围第1个值;
    • $limit 指定范围最后1个值;
    • $step 指定步长值,必须为正整数,默认为1。

PHP笔记之图像操作以及绘制图像验证码 PHP笔记之图像操作以及绘制图像验证码

3、合并数组array_merge()

  • 描述:合并一个或多个数组
  • 语法:array array_merge ( array $array1 [, array $... ] )

说明:如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

PHP笔记之图像操作以及绘制图像验证码 PHP笔记之图像操作以及绘制图像验证码

4、从数组中随机取出一个或多个单元(下标)

  • 描述:从数组中随机取出一个或多个单元
  • 语法:mixed array_rand ( array $input [, int $num_req = 1 ] )
  • 参数:$input代表当前数组 , $num_req指明了你想取出多少个单元。

PHP笔记之图像操作以及绘制图像验证码

也就是说从数组$arr1中取下标为3,23,25,27对应的值

PHP笔记之图像操作以及绘制图像验证码

5、生成更好的随机数

  • 描述:生成更好的随机数
  • 语法:int mt_rand ( int $min , int $max )
  • 参数:min可选的、返回的最小值(默认:0);max可选的、返回的最大值。

PHP笔记之图像操作以及绘制图像验证码

实例:往图像上写入一行汉字

  • 描述:用 TrueType 字体向图像写入文本
  • 语法:array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
  • 参数:
    • $size,字号大小,自定义,同word字号一样;
    • $angle,旋转角度(0~360);
    • $x和$y,定义了第一个字符的基本点(大概是字符的左下角)。
    • $fontfile,是想要使用的 TrueType 字体的绝对路径
    • $text,UTF-8 编码的文本字符串(其它编码要进行转换)。

PHP笔记之图像操作以及绘制图像验证码

实例:制作图像水印效果

  • 描述:为图像分配透明颜色imagecolorallocatealpha()
  • 语法:int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
  • 说明:imagecolorallocatealpha() 的行为和 imagecolorallocate() 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0表示完全不透明,127 表示完全透明。

PHP笔记之图像操作以及绘制图像验证码 PHP笔记之图像操作以及绘制图像验证码

实例:生成图像缩略图

  • 描述:将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,减小了图像的大小而仍然保持了极大的清晰度
  • 语法:bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h ) 
  • 参数:
    • $dst_image,目标图像;
    • $src_image,源像图;
    • $dst_x和$dst_y,目标图像x、y坐标;
    • $src_x和$src_y,源图像x、y坐标;
    • $dst_w和$dst_h,目标图像的宽度和高度;
    • $src_w和$src_h,源图像的宽度和高度;
  • 提示:如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。

PHP笔记之图像操作以及绘制图像验证码