一、办理中文截取乱码mb_substr

echo mb_substr(\公众中abc\"大众,0,2,\"大众utf-8\"大众);

二、图片处理函数GD2

php图片处理扩展PHP扩大函数 图片处置函数GD2 NoSQL

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() 判断是否开启对应函数库,返回支持库字符串数组