文档章节

PHP常用图像函数使用讲解

Adam-Lee
 Adam-Lee
发布于 2011/09/05 22:36
字数 1389
阅读 415
收藏 3

本人使用的环境是windows下的,故需先启用GD库以支持图片函数的使用(GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片),找到windows下的php.ini文件,去除 ";extension=php_gd2.dll"前面的分号,重启Apache就可以;

GD库函数的介绍:

imagecreate ( int $x_size , int $y_size ):新建一个基于调色板的图像;

imagecreatetruecolor ( int x_size, int y_size ) : 新建一个真彩色图像

imagecolorallocate ( resource $image , int $red , int $green , int $blue ):为一幅图像分配颜色,第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色,即用 imagecreate() 建立的图像。

imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ):用 color 颜色在图像 image 中从坐标 x1 ,y1 到 x2 ,y2 (图像左上角为 0, 0)画一条线段。

imagesetpixel ( resource $image , int $x , int $y , int $color ):在 image 图像中用 color 颜色在 x ,y 坐标(图像左上角为 0,0)上画一个点。

imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ):用 col 颜色将字符串 s 画到 image 所代表的图像的 x ,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。

imagejpeg($img):以 JPEG 格式将图像输出到浏览器或文件。

以上函数使用方法详见综合实例

bool imageellipse ( resource $image , int $cx , int $cy , int $w , int $h , int $color ):image 所代表的图像中画一个中心为 cxcy (图像左上角为 0, 0)的椭圆。wh 分别指定了椭圆的宽度和高度,椭圆的颜色由 color 指定。

example:

<?php

// 新建一个空白图像
$image imagecreatetruecolor(400300
);

// 填充背景色
$bg imagecolorallocate($image
);

// 选择椭圆的颜色
$col_ellipse imagecolorallocate($image255255255
);

// 画一个椭圆
imageellipse($image200150300200$col_ellipse
);

// 输出图像
header("Content-type: image/png"
);
imagepng($image
);

?>

imagearc ( resource $image , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color ):cxcy (图像左上角为 0, 0)为中心在 image 所代表的图像中画一个椭圆弧。wh 分别指定了椭圆的宽度和高度,起始和结束点以 se 参数以角度指定。0°位于三点钟位置,以顺时针方向绘画。

example:

<?php
// 创建一个 200X200 的图像
$img imagecreatetruecolor(200200);
// 分配颜色
$white imagecolorallocate($img255255255);
$black imagecolorallocate($img);
// 画一个黑色的圆
imagearc($img100100150150360$black);
// 将图像输出到浏览器
header("Content-type: image/png");
imagepng($img);
// 释放内存
imagedestroy($img);
?>
imagepolygon ( resource $image , array $points , int $num_points , int $color ):在图像中创建一个多边形。points 是一个 PHP 数组,包含了多边形的各个顶点坐标,即 points[0] = x0,points[1] = y0,points[2] = x1,points[3] = y1,以此类推。num_points 是顶点的总数。
example:
<?php
// create a blank image
$image imagecreatetruecolor(400300
);

// fill the background color
$bg imagecolorallocate($image
);

// choose a color for the polygon
$col_poly imagecolorallocate($image255255255
);

// draw the polygon
imagepolygon($image
,
             array (
                    
,
                    
100200
,
                    
300
200
             
),
             
3
,
             
$col_poly
);

// output the picture
header("Content-type: image/png"
);
imagepng($image
);

?>
imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ):col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。
example:
<?php
 $img = imagecreate(200,200);
 //imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
 $backgroundcolor = imagecolorallocate($img,0,0,0);//背景颜色黑色
 $white = imagecolorallocate($img,255,255,255);//白色
 $blue = imagecolorallocate($img,0,0,255);//蓝色
 $green = imagecolorallocate($img,0,255,0);//绿色
 //在$img中画两个大小变化的矩形:
 imagerectangle($img,rand(20,180),rand(20,180),rand(20,180),rand(20,180),$green);
 imagerectangle($img,rand(20,180),rand(20,180),rand(20,180),rand(20,180),$blue);
//设置编码
 header("content-type:image/jpeg");
//将图片显示于浏览器:
 imagejpeg($img);
?>
 
综合实例:(图片验证码制作:)
test.php图片文件:(内容如下:)
<?php
session_start();
for($i=1;$i<=4;$i++)
{
 $rand.=dechex(rand(1,15));
}
$_SESSION['check_img'] = strtolower($rand);
$img = imagecreate(60,28);//新建一个基于调色板的图像,语法:resource imagecreate ( int $x_size , int $y_size )
$backgroundcolor = imagecolorallocate($img,0,0,0);//为一幅图像分配颜色,第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色,即用 imagecreate() 建立的图像。语法:int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
$white = imagecolorallocate($img,255,255,255);//白色
$blue = imagecolorallocate($img,0,0,255);//蓝色
$green = imagecolorallocate($img,0,255,0);//绿色
$red = imagecolorallocate($img,255,0,0);//红色
for($i=1;$i<=100;$i++)
{
 imageline($img,0,0,rand(20,60),rand(10,28),$blue);//imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ),用 color 颜色在图像 image 中从坐标 x1 ,y1 到 x2 ,y2 (图像左上角为 0, 0)画一条线段。
 imagesetpixel($img,rand(2,60),rand(3,28),$green);//imagesetpixel ( resource $image , int $x , int $y , int $color ),在 image 图像中用 color 颜色在 x ,y 坐标(图像左上角为 0,0)上画一个点。
}
imagestring($img,5,rand(3,23),rand(3,12),$rand,$white);//imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ),用 col 颜色将字符串 s 画到 image 所代表的图像的 x ,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
header("content-type:image/jpeg");
imagejpeg($img);//以 JPEG 格式将图像输出到浏览器或文件
?>
lo.php测试验证码文件(内容如下):
<?php
session_start();
header("content-type:text/html;charset=utf-8");
if($_POST['submit'])
{
 $check_yzm = strtolower($_POST['check_img']);
 if($check_yzm==$_SESSION['check_img'])
  echo "验证码正确";
 else
  echo "验证码错误";
}
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<p><img src="test.php" /></p>
<p><input type="text" name="check_img" /></p>
<p><input type="submit" name="submit" value="提交" /></p>
</form>
该两文件同放于一目录,当我们访问lo.php时,即能看到验证码的效果;
备注:此文若有任何不足或遗漏,望指出,多谢···
   李汉团  5th,Sep 2011

© 著作权归作者所有

Adam-Lee
粉丝 50
博文 118
码字总数 166965
作品 0
深圳
程序员
私信 提问
加载中

评论(1)

牛强
牛强
收藏了
http://www.drupaler.co/
现货!《PHP7实践指南:o2o网站与App后台开发》京东天猫有售

终于发售了,啥也不想说了,喜欢的或需要的就点击 链接 进去购买吧。 另外此书将作为 2017 PHP全球开发者大会 现场活动用书 天猫购书 包邮 PHP7实践指南:O2O网站与App后台开发 数据库设计 PH...

szxy1234
2017/11/02
0
0
php程序员应该掌握的10个技能

1、语法:必须熟练掌握 ,写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。 2、命令:必须熟悉PHP带的一些常用命令及其常用选项,熟悉那些...

忆童
2012/02/14
142
0
一个PHP程序员应该掌握的10项技能

网站推广很多学PHP的人一直也搞不清楚,一个PHP程序员和Java程序员或者是.net程序员有什么不同,告诉你,其实都一样!没有什么不同,下面的内容,就是针对一个Java程序员掌握的技能对比PHP来说...

网络营销
2011/12/31
145
0
[Python图像处理] 十六.图像的灰度非线性变换之对数变换、伽马变换

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/88929290 该系列文章是讲解Python OpenCV图像处理知识,前...

Eastmount
2019/03/31
0
0
一个PHP程序员应该掌握的10项技能!【更新】

很多学PHP的人一直也搞不清楚,一个PHP程序员和Java程序员或者是.net程序员有什么不 同,告诉你,其实都一样!没有什么不同,下面的内容,就是针对一个Java程序员掌握的 技能对比PHP来说的!...

朱志兵
2010/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

金蝶EAS DEP 服务端 脚本

1、服务端执行SQL //服务端更新单据状态var imp = JavaImporter(); imp.importPackage(Packages.com.kingdee.eas.scm.im.inv); imp.importPackage(Packages.com.kingdee.eas.srt.comm......

路过饭堂门口
27分钟前
24
0
Hive之导出文件按逗号分隔到本地文件

如下所示,默认导出的是用\t分隔的,需要使用管道符进行转换,经常使用到,记录下. List-1 hive -e "SELECT * from student" | sed 's/\t/,/g' > /tmp/student.csv...

克虏伯
37分钟前
34
0
转置/解压缩功能(zip的反转)?

我有一个2项元组的列表,我想将它们转换为2个列表,其中第一个包含每个元组中的第一个项目,第二个列表包含第二个项目。 例如: original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]# an......

技术盛宴
53分钟前
53
0
小猪o2o系统v14.0升级v14.1攻略含小猪CMS微店铺和智慧店铺及小程序百项升级

首先我们要注意升级前的以下几个内容: 即 对环境的要求 网站需求PHP7.1 MYSQL5.1以上 Sw解密组件 解密组件在swoole-loader内 解压缩网站包 修改Conf/db.php内数据库文件 替换数据库内xxx.com...

my_gode
今天
98
0
「干货来袭」Github最全Nodejs资源集

今天给大家分享一下Github上面最全的Nodejs资源集awesome-nodejs,该项目聚合了nodejs各类优质资源,对自立于全栈开发或者想了解nodejs技术栈的开发同学极有帮助,有想进一步了解nodejs的千万...

gamedilong
今天
56
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部