赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 编程语言

常用的编程语言
C#编程语言基础
C#面向对象与多线程
C#数据及文件操作
JavaScript基础
JavaScript的数据类型和变量
JavaScript的运算符和表达式
JavaScript的基本流程控制
JavaScript的函数
JavaScript对象编程
JavaScript内置对象和方法
JavaScript的浏览器对象和方法
JavaScript访问HTML DOM对象
JavaScript事件驱动编程
JavaScript与CSS样式表
Ajax与PHP
ECMAScript6的新特性
Vue.js前端开发
PHP的常量与变量
PHP的数据类型与转换
PHP的运算符和优先规则
PHP程序的流程控制语句
PHP的数组操作及函数
PHP的字符串处理与函数
PHP自定义函数
PHP的常用系统函数
PHP的图像处理函数
PHP类编程
PHP的DataTime类
PHP处理XML和JSON
PHP的正则表达式
PHP文件和目录处理
PHP表单处理
PHP处理Cookie和Session
PHP文件上传和下载
PHP加密技术
PHP的Socket编程
PHP国际化编码
MySQL数据库基础
MySQL数据库函数
MySQL数据库账户管理
MySQL数据库基本操作
MySQL数据查询
MySQL存储过程和存储函数
MySQL事务处理和触发器
PHP操作MySQL数据库
数据库抽象层PDO
Smarty模板
ThinkPHP框架
Python语言基础
Python语言结构与控制
Python的函数和模块
Python的复合数据类型
Python面向对象编程
Python的文件操作
Python的异常处理
Python的绘图模块
Python的NumPy模块
Python的SciPy模块
Python的SymPy模块
Python的数据处理
Python操作数据库
Python网络编程
Python图像处理
Python机器学习
TensorFlow深度学习
Tensorflow常用函数
TensorFlow用于卷积网络
生成对抗网络GAN


首页 > 专业技术 > 编程语言 > PHP的图像处理函数
PHP的图像处理函数

PHP提供了一系列函数,实现在网站编程中对图像进行编辑,在需要动态生成图像、自动批量处理图像等方面能带来很大帮助,最为典型的应用有随机图像验证码、图片水印、数据统计中饼状图、柱状图的生成等。

PHP的图像处理函数都封装在一个函数库GD中,要使用GD库中的函数必须保证安装了GD库,PHP官方标准发行版本中都包含了这个库。GD库存放在PHP安装目录下的ext子目录下,名为php_gd2.dll。在默认的php.ini设置中,这个库并不自动载入,用记事本打开配置文件,找到";extension=php_gd2.dll"这一行,将前面的分号去掉,然后保存并重启,GD库就可以自动加载了。想知道GD函数库是否成功加载,可使用phpinfo()函数,查看列出的信息是否有GD项。

PHP提供的图像处理函数总数超过100个, 下表列出PHP常用的图像处理函数:

函数名

功能描述

gd_info()

取得当前安装的GD库的信息

getimagesize()

取得图像大小

image_type_to_extension()

取得图像类型的文件后缀

image_type_to_mime_type()

取得getimage、exif_read_data、exif_thumbnail、exif_imagetype所返回的图像类型的MIME类型

image2wbmp()

以WBMP格式将图像输出到浏览器或文件

imagealphablending()

设定图像的混色模式

imageantialias()

是否使用抗锯齿(antialias)功能

imagearc()

画椭圆弧

imagechar()

水平地画一个字符

imagecharup()

垂直地画一个字符

imagecolorallocate()

为一幅图像分配颜色

imagecolorallocatealpha()

为一幅图像分配颜色及alpha

imagecolorrat()

取得某像素的颜色索引值

imagecolorclosest()

取得与指定颜色最接近的颜色的索引值

imagecolorclosestalpha()

取得与指定颜色及透明度最接近的颜色

imagecolorclosesthwb()

取得与给定颜色最接近的色度的黑白色的索引

imagecolordeallocate()

取消图像颜色的分配

imagecolorexact()

取得指定颜色的索引值

imagecolorexactalpha()

取得指定的颜色及透明度的索引值

imagecolormatch()

使一个图像中调色板版本的颜色与真彩色版本的更匹配

imagecolorresolve()

取得指定颜色的索引值或有可能得到的最接近的替代值

imagecolorresolvealpha()

取得指定颜色及alpha的索引值或有可能得到的最接近的替代值

imagecolorset()

给指定调色板索引设定颜色

imagecolorsforindex()

取得某索引的颜色

imagecolorstotal()

取得一幅图像的调色板中颜色的数目

imagecolortransparent()

将某个颜色定义为透明色

imageconvolution()

用系数div和offset申请一个3x3的卷积矩阵

imagecopy()

拷贝图像的一部分

imagecopymerge()

拷贝并合并图像的一部分

imagecopymergegray()

用灰度拷贝并合并图像的一部分

imagecopyresampled()

重采样拷贝部分图像并调整大小

imagecopyresized()

拷贝部分图像并调整大小

imagecreate()

新建一个基于调色板的图像

imagecreatefromgd2()

从GD2文件或URL新建一图像

imagecreatefromgd2part()

从给定的GD2文件或URL中的部分图像新建一图像

imagecreatefromgd()

从GD文件或URL新建一图像

imagecreatefromgif()

从GIF文件或URL新建一图像

imagecreatefromjpeg()

从JPEG文件或URL新建一图像

imagecreatefrompng()

从PNG文件或URL新建一图像

imagecreatefromstring()

从字符串中的图像流新建一图像

imagecreatefromwbmp()

从WBMP文件或URL新建一个图像

imagecreatefromxbm()

从XBM文件或URL新建一个图像

imagecreatefromxpm()

从XPM文件或URL新建一个图像

imagecreatetruecolor()

新建一个真彩色图像

imagedashedline()

画一虚线

imagedestroy()

销毁一图像

imageellipse()

画一个椭圆

imagefill()

区域填充

imagefilledarc()

画一个椭圆弧并填充

imagefilledellipse()

画一椭圆并填充

imagefilledpolygon()

画一多边形并填充

imagefilledrectangle()

画一矩形并填充

imagefilletoborder()

将区域填充到指定颜色的边界为止

imagefilter()

对图像使用过滤器

imagefontheight()

取得字体高度

imagefontwidth()

取得字体宽度

imageftbbox()

给出一个使用FreeType2字体的文本框

imagefttext()

使用FreeType2字体将文本写入图像

imagegammacorrect()

对GD图像应用gamma修正

imagegd2()

将GD2图像输出到浏览器或文件

imagegd()

将GD图像输出到浏览器或文件

imagegif()

以GIF格式将图像输出到浏览器或文件

imagegrabscreen()

捕获整个屏幕

imagegrabwindow()

捕获一个窗口

imageinterlace()

激活或禁止隔行扫描

imageistruecolor()

检查图像是否为真彩色图像

imagejpeg()

以JPEG格式将图像输出到浏览器或文件

imagelayereffect()

设定alpha混色标志以使用绑定的libgd分层效果

imageline()

画一条线段

imageloadfont()

载入一新字体

imagepalettecopy()

将调色板从一幅图像拷贝到另一幅

imagepng()

以PNG格式将图像输出到浏览器或文件

imagepolygon()

画一个多边形

imagepsbbox()

给出一个使用PostScript Type1字体的文本框

imagepsencodefont()

改变字体中的字符编码矢量

imagepsextendfont()

扩充或精简字体

imagepsfreefont()

释放一个PostScript Type1字体所占用的内存

imagepsloadfont()

从一个文件中加载PostScript Type1字体

imagepsslantfont()

倾斜某字体

imagepstext()

用PostScript Type1字体把字符串画在图像上

imagerectangle()

画一个矩形

imagerotate()

用给定角度旋转图像

imagesavealpha()

设置标记以在保存PNG图像时保存完整的alpha通道信息

imagesetbrush()

设定画线用的画笔图像

imagesetpixel()

画一个单一像素

imagesetstyle()

设定画线的风格

imagesetthickness()

设定画线的宽度

imagesettile()

设定用于填充的贴图

imagestring()

水平地画一行字符串

imagestringup()

垂直地画一行字符串

imagesx()

取得图像宽度

imagesy()

取得图像高度

imagetruecolortopalette()

将真彩色图像转换为调色板图像

imagettfbbox()

取得使用TrueType字体的文本的范围

imagettftext()

用TrueType字体向图像写入文本

imagetypes()

返回当前PHP版本所支持的图像类型

imagewbmp()

以WBMP格式将图像输出到浏览器或文件

imagexbm()

将XBM图像输出到浏览器或文件

iptcembed()

将二进制IPTC数据嵌入到一幅JPEG图像中

iptcparse()

将二进制IPTC块解析为单个标记

jpeg2wbmp()

将JPEG图像文件转换为WBMP图像文件

png2wbmp()

将PNG图像文件转换为WBMP图像文件

示例:

1.绘制PNG图形:

<!--图像处理函数使用实例-->
<?php
header("Content-type:image/png");
$im=@imagecreate(200, 100) or die("无法创建图像流");
@imagecolorallocate($im, 240, 150, 255);
$t_color1=imagecolorallocate($im, 0, 0, 0);
$t_color2=imagecolorallocate($im, 100, 100, 100);
imagestring($im, 5, 8, 10, "I like PHP", $t_color1);
imagestringup($im, 5, 8, 90, "Hello!", $t_color2);
imageellipse($im, 65, 65, 55, 55, $t_color1);
imagefilledrectangle($im, 110, 95, 160, 30, $t_color2);
imagepng($im);
imagedestroy($im);
?>
程序中动态生成了一幅png图像。imagecreate()函数创建一幅图像,其中两个参数为图像的宽度和高度,单位为像素,并且返回此图像的数据流,存放在$im变量中。imagecolorallocate()函数设置了图像的背景颜色,4个参数分别为图像流和RGB色值。imagestring()函数在图像上写入字符串,6个参数分别为图像流、所用字体、写入点的XY坐标、要写入的字符串和字符串的颜色,其中字体取值范围1~5,代表5种字体,坐标相对于左上角。imagestringup()函数以竖直方向写入字符串。imageellipse()函数在图像中画一个椭圆,第一个参数为图像流,最后一个参数为颜色,中间4个参数表示圆心的x坐标、y坐标、x方向半径、y方向半径,x和y半径相等时为圆,不等时为椭圆。imagefilledrectangle()函数绘制矩形并填充颜色,第一个参数为图像流,最后一个参数为填充颜色,中间4个参数分别为左上角x坐标y坐标和右下角x坐标y坐标。imagepng()函数将图像流输出为一张png格式图片,imagedestroy()销毁这个图像流。

2.制作水印效果:

<!--图像处理函数使用实例-->
<?php
header("Content-type:image/jpeg");
$im=imagecreatefromjpeg("pic.jpg") ;
$white=imagecolorallocate($im, 255, 255, 255);
$width=imagesx($im);
$height=imagesy($im);
$x=0;
$y=0;
while ($x<$width && $y<$height) {
  imagestring($im, 2, $x, $y, "http://www.dwenzhao.cn", $white);
  $x+=20;
  $y+=20;
}
imagejpeg($im);
imagedestroy($im);
?>
imagecreatefromjpeg()函数打开了一张图片,并返回此图片的数据流。imagesx()和imagesy()函数取得图片的原始尺寸。然后定义了控制文字添加位置的两个变量,使用循环向图片中添加多行文字,用$x和$y两个变量控制位置和循环次数。最后输出此图片,销毁数据流。

3.图像验证码生成:

这里包括3个文件:showimg.php生成验证码并写入图片;login.html将用户输入的验证码提交;check.php验证用户输入的验证码是否正确。
showimg.php:
<!--生成验证码图片的程序-->
<?php
$num="";
for ($i=0;$i<4;$i++) { //随机生成一个4位数数字验证码
  $num.=rand(0,9); //也可用rand(1000,9999)直接生成
}
Session_start(); //生成的验证码写入session,备页面验证使用
$_SESSION["Checknum"]=$num;
header("Content-type:image/png");
$im=imagecreate(60, 20) ; //创建图片
$black=imagecolorallocate($im, 0, 0, 0); //定义颜色值
$gray=imagecolorallocate($im, 200, 200, 200);
imagefill($im, 0, 0, $gray);
$style=array($black, $black, , $black, $black, $black, $gray, , $gray, $gray, $gray, $gray);
imagesetstyle($im, $style);
$y1=rand(0, 20);
$y2=rand(0, 20);
$y3=rand(0, 20);
$y4=rand(0, 20);
imageline($im, 0, $y1, 60, $y3, IMG_COLOR_STYLED); //绘制虚线
imageline($im, 0, $y2, 60, $y4, IMG_COLOR_STYLED);
for ($i=0;$i<80;$i++) { //随机生成大量黑点
  $imagesetpixel($im, rand(0, 60), rand(0, 20), $black);
}
$strx=rand(3, 8);
for ($i=0;$i<4;$i++) { //将数字显示在画布上,位置随机
  $strpos=rand(1, 6);
  $imagestring($im, r5, $strx, $strpos, substr($num, $i, 1), $black);
  $strx+=rand(8, 12);
}
imagepng($im);
imagedestroy($im);
?>
需要一个网页来调用验证码图片,并给出表单要求用户输入:
<!--login.html调用图片,生成表单-->
<html>
<head>
  <title>图形验证码程序</title>
</head>
<body>
<form action="check.php" method="post">
<img src=showimg.php><br />
请输入验证码:<input type="text" name="passcode">
<input type=submit value="确定">
</form>
</body>
</html>
验证码本身是一张图片,所以使用<img>标记来引用,而这张图片是用PHP程序生成的,因此直接用“src=showimg.php”来调用。
验证程序:check.php
<!--check.phpl对输入的验证码进行验证-->
<?php
session_start();
$passcode=$_SESSION["Checknum"];
$usercode=$_POST["passcode"] ;
if ($passcode==$usercode) {
  echo "验证码正确!";
} else {
  echo "验证码错误!";
}
?>

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659