php 画图 (采用php的GD库)
一.先检验测试是否你已经安装了GD2函数库。----------查看php.ini
如果没有看到就修改一下php.ini,将extension=php_gd2.dll前的分号去掉就OK了。
//建立一幅100*30的图像
$image = imagecreatetruecolor(200,100);
//设置背景颜色
$bgcolor = imagecolorallocate($image,0,0,0);
//设置字体颜色
$textcolor = imagecolorallocate($image,255,255,255);
//把字符串写在图像左上角
imagestring($image,20,15,10,"Hello world!",$textcolor);
//输出图像
header("Content-type: image/jpeg");
imagejpeg($image);
二.简单实例
直接开始创建图像:
一般步骤是:
1:创建一个背景图像,之后所有的图像基于该背景。
2:在背景上绘制图形轮廓或者输入文本。
3:输出最终图形。
4:清除所有资源。
//创建一幅图像的基本步骤
$values = array(
40,50,
20,240,
60,60,
240,20,
50,40,
10,10,
); //设置点坐标,绘制六边形用一个数组把六个点的坐标储存起来
//创建图像 是一个变长为250的正方形 此处用到函数ImageCreateTrueColor()
$image = imagecreatetruecolor(250,250);
//设定颜色 以后要用到
$bgcolor = imagecolorallocate($image,200,200,200);
$blue = imagecolorallocate($image,0,0,255);
//画一个多边形 用到函数ImageFilledPolygon() 相信下面括号里的参数一看就懂吧,记住我们要画六边形
imagefilledpolygon($image,$values,6,$blue);
//输出图像
header("Content-type:image/png"); //此函数用来发送页面的http标题^_^ 小菜我也只是了解
imagepng($image); //将图像以png的格式发送到浏览器
imagedestroy($image); //释放资源
三.用一个图片作为背景绘图
$image = imagecreatefromjpeg("abc.jpg"); //同样我们可以用一幅图片来当图像的背景 函数名相当容易理解(只要英语好^_^)
$values = array(
40,50,
20,240,
60,60,
240,20,
50,40,
10,10,
);
$blue = imagecolorallocate($image,0,0,255);
imagefilledpolygon($image,$values,6,$blue);
header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
记得在输出图像的时候,我们用到了imagepng(),我们只要再加一个参数就可以保存我们的图像到我们的当前目录下,具体代码如下:
//将图像保存到文件
$img = imagecreatetruecolor(200,200);
$white = imagecolorallocate($img,255,255,255);
$black = imagecolorallocate($img,0,0,0);
imagearc($img,100,100,150,150,0,360,$white);
imagepng($img,"testpng.png"); //在我们的当前目录下就可以看到一个testpng.png图片
imagedestroy($img);
四.一个RGB图的实例:
$size = 300;
$image = imagecreatetruecolor($size,$size);
//用白色背景,黑色边框画方框
$back = imagecolorallocate($image,255,255,255);
$border = imagecolorallocate($image,0,0,0);
imagefilledrectangle($image,0,0,$size,$size,$back); //画出白色背景
imagerectangle($image,0,0,$size-1,$size-1,$border); //画出黑色边框
$yellow_x = 150;
$yellow_y = 75;
$red_x = 100;
$red_y = 160;
$blue_x = 200;
$blue_y = 160;
$radius = 150;
$yellow = imagecolorallocatealpha($image,255,255,0,75); //此函数将黄色的alpha值调为75,就是透明度
$red = imagecolorallocatealpha($image,255,0,0,75);
$blue = imagecolorallocatealpha($image,0,0,255,75);
//画三个交叠的圆
imagefilledellipse($image,$yellow_x,$yellow_y,$radius,$radius,$yellow); //此函数就是我要在$image上画一个圆心($yellow_x,$yellow_y)半径为$radius/2颜色为$yellow的圆
imagefilledellipse($image,$red_x,$red_y,$radius,$radius,$red);
imagefilledellipse($image,$blue_x,$blue_y,$radius,$radius,$blue);
//输出正确的header
header("Content-type: image/png");
//输出结果
imagepng($image);
imagedestroy($image);
获取像素的值:
//获取像素的颜色
$image = imagecreatefromjpeg("abc.jpg");
$rgb = imagecolorat($image,100,100);
$r = ($rgb>>16) & 0xFF;
$g = ($rgb>>8) & 0xFF;
$b = ($rgb) & 0xFF;
echo "红:$r 绿:$g 蓝:$b";
五.一个3D效果的柄状图:
$image = imagecreatetruecolor(100,100);
//设定颜色以后备用,从变量名中就可看出是什么颜色了
$white = imagecolorallocate($image,0xFF,0xFF,0xFF);
$gray = imagecolorallocate($image,0xC0,0xC0,0xC0);
$darkgray = imagecolorallocate($image,0x90,0x90,0x90);
$navy = imagecolorallocate($image,0x00,0x00,0x80);
$darknavy = imagecolorallocate($image,0x00,0x00,0x50);
$red = imagecolorallocate($image,0xFF,0x00,0x00);
$darkred = imagecolorallocate($image,0x90,0x00,0x00);
//制作3D效果
for ($i = 60;$i > 50;$i--){
imagefilledarc($image,50,$i,100,50,0,45,$darknavy,IMG_ARC_PIE); //我要在$image上画一个圆心(50,$i)长100宽50,0(3点钟位置)——45度,颜色为darknavy的椭圆,最后一个参数不懂
imagefilledarc($image,50,$i,100,50,45,75,$darkgray,IMG_ARC_PIE);
imagefilledarc($image,50,$i,100,50,75,360,$darkred,IMG_ARC_PIE);
} //此处的for循环是将柄状图的高体现出来,百分比的体现和下面一样
imagefilledarc($image,50,50,100,50,0,45,$navy,IMG_ARC_PIE);
imagefilledarc($image,50,50,100,50,45,75,$gray,IMG_ARC_PIE);
imagefilledarc($image,50,50,100,50,75,360,$red,IMG_ARC_PIE);
//输出图像
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
六.处理画布透明背景色
<?PHP
/*
*$sourePic:原图路径
* $smallFileName:小图名称
* $width:小图宽
* $heigh:小图高
* 转载注明 www.hzhuti.com */
function pngthumb($sourePic,$smallFileName,$width,$heigh){
$image=imagecreatefrompng($sourePic);//PNG
imagesavealpha($image,true);//这里很重要 意思是不要丢了$sourePic图像的透明色;
$BigWidth=imagesx($image);//大图宽度
$BigHeigh=imagesy($image);//大图高度
$thumb = imagecreatetruecolor($width,$heigh);
imagealphablending($thumb,false);//这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;
imagesavealpha($thumb,true);//这里很重要,意思是不要丢了$thumb图像的透明色;
if(imagecopyresampled($thumb,$image,0,0,0,0,$width,$heigh,$BigWidth,$BigHeigh)){
imagepng($thumb,$smallFileName);}
return $smallFileName;//返回小图路径 }
pngthumb("a.png", "c.png", 300, 300);//调用
?>