在php里面包含php
header("content-type:image/png");
这样输出的图像就不会乱码了后面跟的Png也能够改变为本身想要输出的图像格式,在这个时候若是var_dump();那么就会出错误,由于输出的是图片格式,须要用到var_dump()的时候注释掉就能够了。windows
imageCreateTrueColor(height,weidth);//建立画布设置宽高
imageColorAllocate(img_resource,r,g,b);//设置画布的颜色
imageFill(img_resource,x,y,color);
(x,y)表示从哪里开始填充颜色不写的话默认是黑色的数组
出现的问题:在设置起始填充位置时若是超出画布大小则会以默认颜色填充浏览器
imagerectangle(img_resource,x1,y1,x2,y2,color);
x1,y1左上角性能
x2,y2右下角字体
imagefilledrectangle(img_resource,x1,y1,x2,y2,color);
空心编码
imageellipse(img_resource,x,y,圆形的上下长,圆形的左右长,color);
x,y表示的圆心位置code
实心对象
imagefilledellipse(img_resource,x,y,圆形的上下长,圆形的左右长,color);
imageline(img_resource,x1,y1,x2,y2,color)
x1,y1起始位置坐标图片
x2,y2终点位置坐标
imagesetthickness(img_resource,width);//设置绘制线条的宽度
在绘制某一图形以前设置
要绘制两个宽度不同的线条,案例以下
imagesetthickness($im,20); imageline($im,0,0,500,500,$blue); imagesetthickness($im,10); imageline($im,0,500,500,0,$blue);
这样,两条线就获得了不一样的宽度
imagesetstyle($im,[$red,$blue,$green]);
同样在绘制前设定上面的案例指的是填充的是三色交替的样子,设置完以后要想看到效果,
imageline(img_resource,x1,y1,x2,y2,IMG_COLOR_STYLED)//颜色资源要改为这个常量IMG_COLOR_STYLED
imagesetpixel($im,x,y,color);
案例以下
<?php header('Content-type:image/JPG');//设置输出的图像格式 $im = imagecreatetruecolor(500,500);//建立画布 $red=imageColorAllocate($im,225,0,0);//建立颜色对象 $green = imagecolorallocate($im, 0,225,0); $blue = imagecolorallocate($im, 0,0,225); $white=imagecolorallocate($im, 255,255,225); imageFill($im,0,0,$white);//画布背景填充颜色,默认黑色 imagesetpixel($im,250,250,$red); for($i=0;$i<1000;$i++){ imagesetpixel($im,mt_rand(0,500),mt_rand(0,500),$red);//此处细节,mt_rand();性能高与rand(); } imagepng($im); ?>
同理把绘制点改成线就能出线干扰线,有兴趣的能够试试我下面的代码跑着玩,每刷新一次又出现新的线条,颇有意思的
<?php header('Content-type:image/JPG');//设置输出的图像格式 $im = imagecreatetruecolor(500,500);//建立画布 $red=imageColorAllocate($im,225,mt_rand(0,255),0);//建立颜色对象 $green = imagecolorallocate($im, 0,225,0); $blue = imagecolorallocate($im, 0,0,225); $white=imagecolorallocate($im, 255,255,225); imageFill($im,0,0,$white);//画布背景填充颜色,默认黑色 imagesetpixel($im,250,250,$red); for($i=0;$i<100;$i++){ imagesetthickness($im,mt_rand(0,50)); $red=imageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));//建立颜色对象 imageline($im,mt_rand(0,500),mt_rand(0,500),mt_rand(0,500),mt_rand(0,500),$red); } imagepng($im); ?>
显示咱们已经用到过了的
imagepng($im);//在浏览器显示资源
imagepng($im,'文件名.png');//保存资源,路径在和代码所在位置同一路径
结束后记得清理内存,图像会占用内存
imagedestroy($im);//操做完成后清理内存
imagettftext($im,size,angle,x,y,color,$font,$text);
size:字体大小,angle:角度,起始打印位置(x,y),颜色color,font:字体资源路径,text文字内容
案例以下
<?php header('Content-type:image/JPG');//设置输出的图像格式 $im = imagecreatetruecolor(500,500);//建立画布 $red=imageColorAllocate($im,225,0,0);//建立颜色对象 $green = imagecolorallocate($im, 0,225,0); $blue = imagecolorallocate($im, 0,0,225); $white=imagecolorallocate($im, 255,255,225); imageFill($im,0,0,$white);//画布背景填充颜色,默认黑色 $font="c:/windows/fonts/simhei.ttf";//设置字体路径,我用的是windos自带的字体 $text='hello';//设置文本内容 for($i=0;$i<mb_strlen($text,'utf-8');$i++)//这里mb_strlen($text,'utf-8')这里是为了中文的输出,按中文计算 //字符串长度 { $color=imageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));//建立随机的颜色对象 imagettftext($im,20,mt_rand(-80,80),20+20*$i,mt_rand(20,30),$color,$font,mb_substr($text,$i,1,'utf-8'));//这里的mb_substr一样是为了中文的输出 } imagepng($im); imagedestroy($im); ?>
mb_substr( $str, $start, $length, $encoding )
$str,须要截断的字符串
$start,截断开始处,起始处为0
$length,要截取的字数
$encoding,网页编码,如utf-8,GB2312,GBK
可以装下文字的盒子
imagettfbbox ($size,$angle,$fontfile,$text)
imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角: 0 左下角 X 位置 1 左下角 Y 位置 2 右下角 X 位置 3 右下角 Y 位置 4 右上角 X 位置 5 右上角 Y 位置 6 左上角 X 位置 7 左上角 Y 位置
知道了四个角的坐标点咱们就能够来求出文本所占的宽高,从而控制文字所在位置
<?php header('Content-type:image/JPG');//设置输出的图像格式 $im = imagecreatetruecolor(500,500);//建立画布 $red=imageColorAllocate($im,225,0,0);//建立颜色对象 $green = imagecolorallocate($im, 0,225,0); $blue = imagecolorallocate($im, 0,0,225); $white=imagecolorallocate($im, 255,255,225); imageFill($im,0,0,$white);//画布背景填充颜色,默认黑色 $font="c:/windows/fonts/simhei.ttf"; $text='我爱你亲爱的姑娘'; $size=30; $box=imagettfbbox($size,0,$font,$text); $width=$box[2]-$box[0]; $height=$box[1]-$box[7]; imagettftext($im,$size,0,250-$width/2,250,$red,$font,$text); imagepng($im); imagedestroy($im); ?>