本笔记主要是关于GD(GRAPHICS DRAW)的函数笔记。这个开放的动态源码在PHP5是被默认安装的,要激活的话还是需要修改PHP.INI文件,去掉相关注释。后面一些例子包括创建缩略图、给图片加水印、给图片加文字、画布划线等。有例图的哦!
在PHP中创建一个图像通畅需要以下4个步骤:
a.创建一个背景图像,以后所有操作都是基于此背景。
b.在图像上绘图轮廓或者输入文本
c.输出最终图形
d.清楚内存中所有资源
1.建立一个图像标示
resource imagecreatetruecolor(int x_size ,int y_size)
2.填充颜色
int imagecolorallocate(resource image ,int red ,int green ,int blue);
3.填充图片
bool imagefill(resource image,int x,int y,int color)
4.画线
bool imageline(resource image ,int x1,int y1,int x2,int y2,int color)
5.画字符串
bool imagestring(resource image,int font ,int x,int y ,string s,int cool)
#font 的字体不是内置的,需要导入字体库后才可以正常使用。
6.欺骗浏览器,让它认为PHP页面是真正的图片。
Header("Content-type:image/png");
7.发送标题后就可以使用imagepng()函数来输出图像数据
bool imagepng(resource image [, string filename])
8.清除所占用缓存
bool imagedestroy(resource image)
9.画一张浅蓝色的画布,上面有白线有白字。效果如下图。
<?php
$height=300;
$width=300;
$im =ImageCreateTrueColor($width,$height);//创建真彩色的图像
$white =ImageColorAllocate($im ,255,255,255);
$blue =ImageColorAllocate($im ,0,0,64);
ImageFill($im,0,0,$blue);//浅蓝色的背景
ImageLine($im,0,0,$width,$height,$white);//在图像上面画一条白线
ImageString($im,4,80,150,"PHP",$white);//写出白色的"PHP"
Header("Content-type:image/png");
ImagePng($im);
ImageDestroy($im);
?>
10.创建缩略图
bool imagecopyresampled(resource dst_image,resource src_image,int dst_x,int dst_y,int
src_x,int src_y,int dst_w,int dst_g,int src_w,int src_h)
#其中dst_image是新建图,src_image是原图。
#dst_x:设定需要载入的图片在新图中的x坐标
#src_x:设定载入图片要载入的区域x坐标
resource iamgecreatefromjpeg(string filename);
#这个函数返回一个图像标识符,代表从给定文件名取得图像。
#如果使用其它格式,PHP也提供相应函数,使用方法基本相同。
<?php
$image = imagecreatefromjpeg("images/cat.jpg");
$width = imagesx($image);
$height = imagesy($image);
$thumb_width = $width *0.5;
$thumb_height = $height *0.5;
$thumb = imagecreatetruecolor($thumb_width,$thumb_height);//创建一个原图一半大小的画布
imagecopyresampled($thumb,$image,0,0,0,0,$thumb_width,$thumb_height,$width,$height);
imagejpeg($thumb,"images/cat_thumb.jpg",100);//将缩略图保存到文件,第三个参数是质量
imagedestroy($thumb);//清楚占用内存
?>
<p>原图</p>
<img src="images/cat.jpg" />
<p>缩略图</p>
<img src="images/cat_thumb.jpg" />
11.给图片加水印
#加水印都是有透明度的,所以需要选择一个PNG格式的图片作为需要添加的水印。
resource iamgecreatefrompng(string filename)
#指向的路径格式如果不是PNG的画,会报错。
#加水印也要用到imagecopyresampled()函数
#PHP还提供imagecopy()函数,但是这个函数复制并没有那么平滑
<?php
$image =imagecreatefromjpeg("images/shaobing.jpg");
$watermark =imagecreatefrompng("images/watermark.png");
$width =imagesx($watermark);
$height = imagesy($watermark);
//将水印加到图片左上角
imagecopyresampled($image,$watermark,0,0,0,0,$width,$height,$width,$height);
imagejpeg($image,"image/shaobing_water.jpg",100);
imagedestroy($image);
?>
<p>原图:</p>
<img src="images/shaobing.jpg" />
<p>水印:</p>
<img src="images/watermark.png" />
<p>合成图:</p>
<img src="images/shaobing_water.jpg" />
12.给图片加文字
imagettftext(resource image ,float size,folat angle,int x,int y ,int color ,string
fontfile,string text)
#size 字体大小
#angle 角度,0为左向右,90为下向上,逆时针计算。
#x y 第一个字符的基本点,大概是字符的左下角位置。
#color 颜色索引,使用负颜色的索引值具有关闭防锯齿的效果。
#fontfile 想要使用TRUETYPE字体的路径
#text 文本文字,这个函数支持的是UTF-8的编码,不是这个编码的画,需要对字符进行编码转换。
string mb_convert_encoding (string str ,string to_encoding [,mixed from_encoding])
#这个函数把输入的str字体从from_encoding编码转换为to_endcoding编码,第三个参数省略的时候
会被自动设定为PHP文件的编码。
#当不确定转换的字符串是什么样格式的时候,可以设定from_encoding为多个字符集,
如"UTF8,GBK,GB2312"。
实例:
<?php
$image =imagecreatefromjpeg("images/shaobing.jpg");
$pink = ImageColorAllocate($image,255,255,255);
//$font_file 字体的路径,视操作系统而定,可以是simhei.ttf(黑体)
//SIMKAI.TTF(楷体),SIMFANG.TTF(仿宋),SIMSUN.TTC(宋体&新宋体)等GD支持的中文字体
$font_file ="C:\WINDOWS\Fonts\msyhbd.ttf";
$str ="我喜欢烧饼! >_< ";
$str =mb_convert_encoding($str,"UTF-8","GBK");
imagettftext($image,25,10,100,200,$pink,$font_file,$str);//设置字体颜色
imagejpeg($image,"image/shaobing_text.jpg",100);//将带有文字的图片保存到文件
imagedestroy($image);
?>
<p>原图:</p>
<img src="images/shaobing.jpg" />
<p>合成图:</p>
<img src="images/shaobing_text.jpg" />