顺晟科技
2021-06-16 10:36:03
198
在php中,使用php进行绘制,当访问php文件时,我们绘制的图像就会出现。Php绘图技术可以应用于报表开发和验证码设计。
在介绍php绘图技术之前,我们首先需要知道php中的绘图坐标系:在php坐标系中,坐标原点位于左上角,以像素为单位。坐标(x,y)——的个是x坐标,表示当前位置在水平方向,距离坐标原点x像素;第二个是y坐标,表示当前位置是垂直的,距离坐标点有y个像素。
特别说明:像素不是长度单位,而是密度单位。理论上,分辨率越小,像素的长度越大。
php绘图的基本原理和步骤
(1)创建画布
(2)绘制各种图形(圆、线、矩形、弧形、扇形.)
(3)将图片输出到网页,或者另存为(在网站开发中可以另存为几种常见的图片格式。基于存储格式的问题,以下描述常见图像格式的特征)
(4)销毁图片(自由内存)
目前网站开发中常见的图片格式有:gif jpg/jpeg png bmp.
总结:
Gif图片压缩比高,但只能显示256色,可能会造成色彩损失,可以显示动画图片;
JPEG/JPEG图片压缩比高(有损压缩),可以用较小的文件显示,在网页上使用较多;
Png(高保真)结合了gif和jpg的优点,缺点是不能显示动画。
现在,让我们开始介绍php附带的绘图函数。在开始之前,我们首先要确认在php配置文件中是否启用了gd库(php的图片库)—— extension=PHP _ gd2.dll。如果未启用,请在启用后重新启动apache!
在php绘图中,我们需要先创建canvas,canvas的背景颜色默认为黑色。
//1.创建画布,默认背景是黑色
$im=imagecreatetruecolor(400,300);
//默认黑色背景,改为白色
$white=imagecolorallocate($im,255,255,255);
imagefill($im,0,0,$ white);
开始在画布上绘制图形$im:
选择用于绘制图形的颜色(此处使用红色)
//创建颜色
$ red=imagecolorallocate,255,0,0);
(1)亚英画一个椭圆(当然你也可以用同样的功能画一个圆)
imageellipse($im,20,20,20,20,$ red);
个参数指示正在绘制哪个画布;第二个和第三个参数表示椭圆的中心坐标(x,y);
第四个和第五个参数表示椭圆的宽度和高度(当然,当宽度和高度相同时,画出的椭圆是圆);
第六个参数表示使用的颜色。
(2)画一条直线
imageline($im,0,0,400,300,$ red);
个参数指示正在绘制哪个画布;
第二和第三参数表示直线的起点坐标(x1,y1);
第4个和第5个参数代表直线的终点坐标(x2,y2)。
第六个参数表示使用的颜色。
(3)画一个矩形
imagerectangle($im,2,2,40,50,$ red);
个参数指示正在绘制哪个画布;
第二个和第三个参数表示矩形左上角的坐标(x1,y1)。
第4个和第5个参数表示矩形的宽度和高度。
第六个参数表示使用的颜色。
(4)画一个实心矩形
imagefiledrectangle($ im,2,2,40,50,$ red);
(参数的含义与“绘制矩形”相同)
(5)画弧线
imagearc($im,100,100,50,50,0,30,$ red);
圆弧绘制是基于类似椭圆绘制的参数传递。
个参数指示正在绘制哪个画布;
第二个和第三个参数表示圆弧所在椭圆的中心坐标(x,y);
第四个和第五个参数表示圆弧所在椭圆的宽度和高度;
第6个和第7个参数是从(第6个参数的值)度到(第7个参数的值)度(例如第6个和第7个参数分别是0和30,表示从0顺时针旋转30画出圆弧,0的方向向右水平);
第八个参数指示使用的颜色。
(6)画一个扇形
imagefiledarc($ im,100,100,80,50,180,270,$red,IMG _ ARC _ PIE);
(前八个参数的含义和“画弧线”一样。)第九个参数是php中的常量。该值可以是:
IMG _弧_派
IMG _弧线_和弦
IMG _ ARC _ NOFIL
IMG _弧形_边缘
IMG_ARC_PIE和IMG_ARC_CHORD互斥;IMG _弧_弦只用一条直线连接起点和终点,而IMG _弧_派创建了一个圆形边界。IMG表示弧或弦只有轮廓,没有填充。IMG _ ARC _ edge表示起止点与中心点之间用一条直线连接,与IMG_ARC_NOFILL配合使用是绘制饼图轮廓(不填充)的好方法。
(7)将源图片复制到目标画布
首先,加载源图像(例如,arrow.jpg)
//加载源图片
$ SRCIMage=imagecreatefrompng(' arrow . jpg ');
这里特别要注意的是,虽然我的图片后缀名是jpg,但实际上我调用的是jpg格式加载图片的功能。也许读者会想,为什么不调用imagecreatefromjpeg函数呢?其实文件的后缀名并不能告诉我们文件属于哪种格式,也就是说,即使这张图片的后缀名是。jpg现在,有可能这张图片的真实格式是png格式。那么怎么知道图片的真实格式呢?可以使用getimagesize(' arrow . jpg ');检查图片的格式。
$ test=getimagesize(' arrow . jpg ');
print _ r($ test);
在打印出返回结果$test后,您将知道其返回结果的含义。包括我们可以清楚的知道图片的“真面目”这一事实,格式其实就是png格式。也可以用这个函数来获取源图片的宽度和高度。
//这里我们可以使用getimagesize()
$ SRCIMageInfo=getimagesize(' arrow . jpg ');
$ ImageWidth=$ SRCIMageInfo[0];
$ imageHeight=$ SRCIMageInfo[1];
获得宽度和高度后,将图片复制到目标画布上。
//将源图片复制到目标画布
imagecopy($im,$srcImage,0,0,100,0,$imageWidth,$ imageHeight);
个参数指示正在绘制哪个画布;
第二个参数表示加载的源图片;
第3个和第4个参数表示目标画布的坐标(x1,y1)(复制到画布的坐标(x1,y1)位置);
第5、6个参数表示截取的原始图片左上角的坐标(x2,y2)位置;
第7和第8个参数表示原图的宽度和高度。
(8)写作
$str='你好,世界!“你好,世界!”;
//用imagestring写中文会造成字符乱码
imagestring($im,5,0,0,$str,$ red);
个参数指示正在绘制哪个画布;
第二个参数表示内置字体(值为1、2、3、4或5);
第三和第四个参数表示待绘制内容左上角的位置坐标;
第五个参数表示要绘制的内容;第六个参数表示使用的颜色。
使用imagestring函数绘制中文时会出现乱码,这里需要另外一个函数imagettftext。
//在字体库中查找中文字体(将字体复制到当前目录)
//字体旋转时,逆时针旋转
imagettftext($im,15,10,50,50,$red,' SIMYOU。TTF ',$ str);
个参数指示正在绘制哪个画布;
第二个参数表示字体大小;
第三个参数表示设置字体旋转的角度;
第4个和第5个参数表示待绘制内容左上角的位置坐标;
第六个参数表示使用的颜色;
第七个参数表示字体名称,从字体库复制到当前目录的字体名称;
第八个参数表示要绘制的内容。
最后,绘制完成后,需要将图片输出到网页——http响应,并另存为!
同时销毁图片(释放——服务器内存)。
//3.将图像输出到网页,或者也保存它
标头(' content-type : image/png ');
image png($ im);
//4.销毁图片(空闲内存-服务器内存)
imagedestory($ im);
特别注意画图后释放内存的操作。
完整的php程序代码:
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
//php绘图技术,参考文档
//1.创建画布,默认背景是黑色
$im=imagecreatetruecolor(400,300);
//默认黑色背景,改为白色
$white=imagecolorallocate($im,255,255,255);
imagefill($im,0,0,$ white);
//2.绘制各种图形(圆形、直线、矩形、弧形、扇形.)
//创建颜色
$ red=imagecolorallocate,255,0,0);
//圆形
imageellipse($im,20,20,20,20,$ red);
//直线
imageline($im,0,0,400,300,$ red);
//矩形
imagerectangle($im,2,2,40,50,$ red);
//填充矩形
imagefiledrectangle($ im,2,2,40,50,$ red);
//arc
imagearc($im、100、100、50、50、0.30、$ red);
//撌公
imagefilldarc($ im、100、100、80、50、180、270、$red、img _ arc _ pie);
//撌噼嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯
//吴亚玲吴亚玲
$ src image=imagecreatefrompng(' arrow。jpg ');
/$ test=getimagesize(' arrow。jpg ');
//print _ r($ test);
//贺盛瑞贺盛瑞贺盛瑞getimagesize()
$ src image info=getimagesize(' arrow。jpg ');
$ image width=$ src image info[0];
$ image height=$ src image info[1];
//
imagecopy($im、$srcImage、0、0、100、0、$imageWidth、$ image height);
//魏冄
$str='你好,世界!哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟,什么事我的天;
//僧曰imagestring(图像字符串)2001年
imagestring($im,5,0,0 ,$ str ,$ red);
//云娥与云娥(云娥与日俱增)
//我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊
imagetttext($ im、15、10、50、50 ),$ red ,' SIMYU '.TTF,$str
//3 .贺南德贺南德贺南德,周亚玲的
标头(“content-type : image/png”);
image png($ im);
//4 .1441年(魏冄-吴登盛)
image store($ im);
?
贺盛瑞?贺盛瑞(哦,天啊PHP?服务器端编程语言(Professional Hypertext Preprocessor的缩写)亚力坤)33435陈力宏三维(three dimension的缩写)效果伊贺盛瑞:
?PHP?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
//云娥(魏冄)
//1 .的
$im=imagecreatetruecolor(400,300);
//黄头发黄头发,阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔
$white=imagecolorallocate($im,255,255,255);
imagefill($im,0.0 ,$ white);
//2 .魏冄
//唉哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟
$ red=imagecolorallocate,254,0.0);
$ dark red=imagecolor allocate($ im,144,0.0);
$ blue=imagecolorallocate,0,0,128);
$深蓝色=imagecolorallocate,0,0,80);
$gray=imagecolorallocate($im,192,192,192);
$ dark gray=imagecolor allocate($ im,144,144,144);
for($ I=60);$i=50$i ->
imagefilldarc($ im、100、$i、100、50、75、360、$darkred、img _ arc _ pie);
imagefilldarc($ im、100、$i、100、50、0.35、$深蓝色、img _ arc _ pie);
imagefilldarc($ im,100 ,$ I,100,50,35.75 ,$ dark gray,img _ arc _ pie);
}
imagefilldarc($ im、100、50、100、50、75、360 )、$red、img _ arc _ pie);
imagefilldarc($ im、100、50、100、50、0.35、$blue、img _ arc _ pie);
imagefilldarc($ im、100、50、100、50、35.75、$gray、img _ arc _ pie);
//贺南德贺南德贺南德,周亚玲的
标头(“content-type : image/png”);
image png($ im);
//1441年(魏冄-吴登盛)
image store($ im);
//阿云娥与阿云娥
?
莫大姐:
哎哎哎,拜占庭拜占庭PHP?服务器端编程语言(Professional Hypertext Preprocessor的缩写)陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,陈力强,贺盛瑞?贺盛瑞,苏慕恩苏慕恩:
检查代码。服务器端编程语言(Professional Hypertext Preprocessor的缩写)
?PHP?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
//echo rand(2.9);
//echo 'br/' .十六进制(兰特(1,15)).br/;
session_start():
$校验码=';
for($ I=0);四美元;$i)>
$checkCode(支票代码)。=十六进制(rand(1,15));
}
//阿叔阿叔阿叔阿叔会话数何曰
$ _ session[' myheckscode ']=$校验码;
//吴邦国,1825年
$ img=imagecreatetrue color(110.30);
//绿筠小姐
//云娥是云娥
$ bgcolor=imagecolor allocate($ img,0,0,0);
imagefill($img,0,0,$ bgcolor);
//唉哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼哼
$white=imagecolorallocate($img,255,255,255);
$blue=imagecolorallocate($img,0,0,255);
$red=imagecolorallocate($img,255,0,0);
$green=imagecolorallocate($img,0,255,0);
//1780年
for($ I=0);20美元;$i)>
//我的天啊,我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊!我的天啊
imageline($img、rand(0.110)、rand(0.30)、rand(0.110)、rand(0.30),
imagecolorrable($ img、rand(0.255)、rand(0.255)、rand(0.255));
}
//吴亚玲,东奔西跑
//for($ I=0);10美元;$i)
//阿力克斯?阿力克斯?阿力克斯
imagestring($img、rand(1.5)、rand(2.80)、rand(2.10)、$checkCode、$ white);
//你好你好
imagefttext数组(string $font_file,string $text [,array $ extrainfo)
//imagetttext($ img,15,10,20,25,$white,' STXINWET).TTF,”哎哎哎哎');
//菲兰达
标头(“content-type : image/png”);
image png($ img);
?
检查代码。服务器端编程语言(Professional Hypertext Preprocessor的缩写)阿云——卓文林文(贺盛德贺盛德贺盛德,魏冄,哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟,阿云哥)
表单操作='登录过程。“PHP”方法=“post”
表。表
trtd(电子商务)伊留克id/tdtdtdindinput type=' text ' name=' id ' value='?PHP echo getcokieval(' id ');" td/tr号文件
trtd(电子商务)是吗你好/tdtdtdindinput类型=' password ' name=' password '//TD/tr
trtd(电子商务)绿筠小姐/tdtdtdindinput类型='text' name='checkCode'/
img src=' CheckCode . PHP ' OnClick=' this . src=' CheckCode . PHP?aa=' Math.random()'//td/tr
Trtd colspan='2 '保存用户id输入类型=' checkbox '值=' yes '名称=' keep'/TD/tr
Trtdinput类型='submit '值=' user log in '/TD
t输入类型='重置'值='重新填充'/td/tr
/table
/form
当您点击验证码时,验证码将被刷新。checkCode.php也使用会话技术,它将随机选择的验证码值保存在服务器上。当用户登录并提交验证码时,可以通过会话取出正确的验证码进行比较。
08
1972-02
17
2022-03
03
2021-08
16
2021-06
16
2021-06
16
2021-06