一、办理中文截取乱码mb_substr
echo mb_substr(\"大众中abc\"大众,0,2,\"大众utf-8\"大众);
二、图片处理函数GD2
GD(graphic device,图形设备),卖力在屏幕和打印机上输出信息。GD2是GDI的后续版本。要利用GD2,首先该当把网页打散作为图像(header),接着创建Graphics类工具(大略的来说,Graphics类工具就相称于画布,没画布我们在什么地方绘图呢?),然后调用一系列绘图方法即可,末了再天生图片、开释资源(destroy)。看下面的代码
步骤:
1、声明:把当前页面通过写代码的办法作为图片天生,语法:
header(“content-type:image/jpeg”);
2、绘图
3、天生图片(把稳格式对应)
语法: imagejpeg();
4、开释资源(销毁材料)
语法:imagedestory();
个中绘图主要函数
//画点
Imagesetpixel
//画线
Imageline
//画矩形
Imagerectangle
//画圆
Imageellipse
//画实心矩形
Imagefilledrectangle
//画实心圆
imagefilledellipse
//画笔墨 不支持中文
Imagestring
//画竖排笔墨
Imagestringup
//画笔墨支持中文
Imagettftext
所有的绘画事情完成,可以利用img标签调用!
!
!
<img src=”xxxx.php”>
示例源码:
<?php
header(\"大众content-type:image/jpeg\"大众);
//实行绘图
//创建画布
$im=imagecreate(200,100);
//添补背景色
imagecolorallocate($im,100,100,100);
//定义颜色
$red=imagecolorallocate($im,255,255,255);
//画点
imagesetpixel($im,5,5,$red);
//画线
imageline($im,0,50,200,50,$red);
//画矩形
imagerectangle($im,100,10,130,40,$red);
//画圆
imageellipse($im,50,50,10,30,$red);
//画实心的矩形
imagefilledrectangle($im,70,10,100,40,$red);
//画实心圆
imagefilledellipse($im,40,20,10,30,$red);
//定义字体
$font=\"大众STXINGKA.TTF\"大众;
//画笔墨
imagestring($im,$font,100,30,'I LIKE TEACHER HE!',$red);
//画竖排笔墨
imagestringup($im,$font,180,90,'I LOVE TEACHER HE!',$red);
//画支持中文的笔墨
imagettftext($im,14,30,80,70,$red,$font,'我爱何老师!
');
//天生图片
imagejpeg($im);
//想一想为什么在天生图片之后无法绘画
imagesetpixel($im,15,15,$red);
//开释资源
imagedestroy($im);
?>
TIPS:练习下多边形的多点坐标,可以利用图片热点技能。
利用GD2和前面的知识画标准验证码:
<?php
header(\"大众content-type:image/jpeg\"大众);
include_once(\"大众CheckNum.php\"大众);
$chnCount=6;//验证码位数
$chn=CreateCheckNumber($chnCount,7);
$fontSize=40;//字体的大小(宽度)
$width=ceil($chnCount($fontSize+0.5));//验证码宽度
$height=$fontSize2-2;//验证码高度
$im=imagecreate($width,$height);
imagecolorallocate($im,243,243,243);
$fontColor=imagecolorallocate($im,70,147,251);
$font='STXINGKA.TTF';
imagettftext($im,$fontSize,0,($width-$fontSize$chnCount+$fontSize)/2,($height-$fontSize)/2+$fontSize,$fontColor,$font,$chn);
//画边框 把稳边框粗细
imagerectangle($im,0,0,$width-1,$height-1,$fontColor);
//画滋扰线
$lineColor=imagecolorallocate($im,249,62,89);
for($i=0;$i<2;$i++)
imageline($im,0,rand(1,$height-1),$width,rand(1,$height-1),$lineColor);
//画滋扰点
for($i=0;$i<100;$i++){
$pixelColor=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im,rand(1,$width-1),rand(1,$height-1),$pixelColor);
}
imagejpeg($im);
imagedestroy($im);
?>
笔墨水印:
以现有的图片作为画布再画上笔墨。
Imagecreatefromjpeg
<?php
header(\公众content-type:image/gif\公众);
//以现有的图片作为背景来创建画布
$im=imagecreatefromgif(\"大众menggou.gif\"大众);
$color=imagecolorallocate($im,255,255,255);
$font='STKAITI.TTF';
imagestring($im,$font,5,5,'http://www.xuewanwang.com',$color);
imagegif($im);
imagedestroy($im);
?>
图片水印:
把.png图片作为水印利用imagecopy函数即可。
获取图片的宽度和高度
Imagesx、imagesy
<?php
header(\"大众content-type:image/jpeg\"大众);
//创建背景,作业:根据背景图创建对应格式的画布
$bgurl=\"大众bg.jpg\"大众;//改变背景图片格式
//$extName=mb_substr($bgurl,strrpos($bgurl,'.'),strlen($bgurl)-strrpos($bgurl,'.'));//背景图片扩展名
$extName=strrchr($bgurl,'.');
switch(strtolower($extName)){
case '.jpg':$bg=imagecreatefromjpeg($bgurl);break;
}
$water=imagecreatefrompng('logo.png');
//获打水印图片的宽高度
$w=imagesx($water);
$h=imagesy($water);
//作业:哀求水印图片涌如今右上角、做下角、右下角、居中
imagecopy($bg,$water,0,0,0,0,$w,$h);
//作业完善:背景图片水印图片的2倍及以上大才天生水印,否则不天生是原图
imagejpeg($bg);
imagedestroy($bg);
?>
作业:
1、在网站根目录下放4个图片,分别命名为1.gif.png.bmp.jPg、 2.gif、3.png、4.bmp 天生图片水印
2、图片水印图片可以在不同的位置涌现,定义变量掌握为左上角、右上角、左下角、右下角、居中
3、背景图片水印图片的2倍及以上大才天生水印,否则不天生是原图。
统计图:
柱状图实现思路:
用户通报的参数为数组,数组中元素个数为多少个单位;纵方向一样平常划分10个等间隔单位意味数组100%,数组中的值在纵方向按百分比显示;缩放柱状图掌握单位间隔。
实现效果如下:
完全代码:
<?php
header(\"大众content-type:image/jpeg\"大众);
/ 建议按300550来缩放,否则会变形 /
$pSize=50;//单位间隔,掌握缩放
$pNameArr=explode(',',$_REQUEST['dw']);//单位名称
$arr=explode(',',$_REQUEST['sj']);//须要天生统计图的数组数据
$im=imagecreate($pSize(count($arr)+2),$pSize(10+1));
imagecolorallocate($im,243,243,243);
$black=imagecolorallocate($im,0,0,0);
//画X轴
imageline($im,0,imagesy($im)-1,imagesx($im),imagesy($im)-1,$black);
//画Y轴
imageline($im,1,0,1,imagesy($im),$black);
//算出数组元素中所有元素的值
$sum=0;
foreach($arr as $v){
$sum+=$v;
}
//画X轴上等距线
$lheight=10;//等距线高度
//字体
$font=\"大众../fonts/STKAITI.TTF\"大众;
for($i=0;$i<count($arr);$i++){
imageline($im,$pSize($i+1),imagesy($im)-1,$pSize($i+1),imagesy($im)-1-$lheight,$black);
//画矩形
imagerectangle($im,$pSize($i+1)-$pSize/2+3,imagesy($im)-$arr[$i]/$sum$pSize10-1-1,$pSize($i+1)+$pSize/2-3,imagesy($im)-1,$black);
$rcolor=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagefilledrectangle($im,$pSize($i+1)-$pSize/2+4,imagesy($im)-$arr[$i]/$sum$pSize10-1,$pSize($i+1)+$pSize/2-4,imagesy($im)-2,$rcolor);
imagettftext($im,16,30,$pSize($i+1)-$pSize/2+4,imagesy($im)-$arr[$i]/$sum$pSize10-4,$rcolor,$font,$arr[$i].$pNameArr[$i]);
}
//画Y轴上等距线
for($i=1;$i<=10;$i++){
imageline($im,1,imagesy($im)-$pSize$i,1+$lheight,imagesy($im)-$pSize$i,$black);
imagestring($im,2,10,imagesy($im)-$pSize$i-5,$i10,$black);
}
imagestringup($im,5,$pSize/2-5,$pSize5,'(%)',$black);
imagejpeg($im);
imagedestroy($im);
?>
饼状图实现效果如下:
<?php
header(\"大众content-type:image/jpeg\公众);
/ 建议按350200来缩放,否则会变形 /
//定义圆半径
$raduis=100;
$arr=explode(',',$_REQUEST['sj']);//须要天生统计图的数组数
$pNameArr=explode(',',$_REQUEST['dw']);//单位名称
//打算数组总值
$sum=0;
//$maxFontSize=strlen($arr[0]);//最大笔墨内容长度
foreach($arr as $v){
$sum+=$v;
//$maxFontSize=strlen($v)>$maxFontSize?strlen($v):$maxFontSize;
}
//foreach($pNameArr as $v)
//$maxFontSize=strlen($v)>$maxFontSize?strlen($v):$maxFontSize;
//字体
$font=\"大众../fonts/STKAITI.TTF\"大众;
$fontSize=13;//字体大小
$im=imagecreate($raduis2+180,$raduis2);
imagecolorallocate($im,243,243,243);
$black=imagecolorallocate($im,0,0,0);
imageellipse($im,$raduis,$raduis,$raduis2-1,$raduis2-1,$black);
$startP=0;//起始角度
for($i=0;$i<count($arr);$i++){
$pieColor=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagefilledarc($im,$raduis,$raduis,$raduis2-3,$raduis2-3,$startP,$startP+$arr[$i]/$sum360,$pieColor,IMG_ARC_EDGED);
$startP+=$arr[$i]/$sum360;
//数据提示
imagettftext($im,$fontSize,0,$raduis2+$fontSize3,$fontSize($i+1)+6,$pieColor,$font,$arr[$i].$pNameArr[$i].'('.round($arr[$i]/$sum100).'%)');
imagefilledrectangle($im,$raduis2+$fontSize,10+$fontSize$i,$raduis2+$fontSize2,6+$fontSize$i+$fontSize,$pieColor);
}
imagejpeg($im);
imagedestroy($im);
?>
补充:好吧,验证码比较丢脸,应大家哀求,换个好看点的
复制代码
1.<?php
2.session_start();
3.header(\公众content-type:image/png\"大众); //设置创建图像的格式
4.$image_width=70; //设置图像宽度
5.$image_height=18; //设置图像高度
6.srand(microtime()100000); //设置随机数的种子
7.for($i=0;$i<4;$i++){ //循环输出一个4位的随机数
8. $new_number.=rand(0,9);
9.}
10.$_SESSION[check_checks]=$new_number; //将获取的随机数验证码写入到SESSION变量中
11.
12.$num_image=imagecreate($image_width,$image_height); //创建一个画布
13.imagecolorallocate($num_image,255,255,255); //设置画布的颜色
14.for($i=0;$i<strlen($_SESSION[check_checks]);$i++){ //循环读取SESSION变量中的验证码
15. $font=mt_rand(3,5); //设置随机的字体
16. $x=mt_rand(1,8)+$image_width$i/4; //设置随机字符所在位置的X坐标
17. $y=mt_rand(1,$image_height/4); //设置随机字符所在位置的Y坐标
18. $color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)); //设置字符的颜色
19. imagestring($num_image,$font,$x,$y,$_SESSION[check_checks][$i],$color); //水平输出字符
20.}
21.imagepng($num_image); //天生PNG格式的图像
22.imagedestroy($num_image); //开释图像资源
23.?>
三、header函数、iconv、get_loaded_extensions函数
header函数
1、声明图片
Header(“content-type:image/xxxx”);
2、当前页面逼迫转码
header(\"大众content-type:text/html;charset=utf-8\"大众);
3、逼迫跳转
header(\"大众location:http://www.xuewanwang.com\"大众);
……
详细请参阅 学玩网 header函数的用法
把稳事变:header函数前不能有空格、回车(\n)、换行(\r)等造孽内容;也不能包含任何输出的语句;不能放任何HTML标签,但是可以放到<html>之前。
iconv字符串逼迫转码:
iconv(\公众原来的编码\"大众,\公众转出后的编码\"大众,$str);
Get_loaded_extensions() 判断是否开启对应函数库,返回支持库字符串数组