GD库

Posted Irving_yx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GD库相关的知识,希望对你有一定的参考价值。

php动态图像处理
  一、支持:需要php支持gd库
    phpinfo()
  二、绘画步骤:
    0.一定要添加header()函数送content-type通知浏览器这次发送的是图片而不是文本
    1. 创建一个画布(画板)、画笔、色彩。
    2. *开始绘画
    3. 输出图像(复制型)
    4. 销毁图像资源(释放内存)

代码:

1 header("Content-Type:image/png");

    1.创建一个画布,颜色

1 $im = imagecreate(200,200);
2 $red = imagecolorallocate($im,255,0,0); //创建一个颜色:红色
3 $blue = imagecolorallocate($im,0,0,255); //创建一个颜色:蓝色 
4 $c1 = imagecolorallocate($im,200,200,200);

 

    2.开始绘画

1 imagefill($im,0,0,$c1); //填充背景
2 //....

 

    3.输出图像

1 header("Content-Type: image/jpeg");//设置响应头信息为一个jpeg的图片
2 imagejpeg($im);//输出一个jpeg图片

    4.销毁

1 imagedestroy($im); //释放内存

  三、图片的具体绘制:
    3.1 创建一个画布:
        imagecreate(宽,高)--创建一个基于256色的画布
        imagecreatetruecolor( int x_size, int y_size ) // 新建一个真彩色图像
        //还有基于某个图片的画布
        imagecreatefromgif( string filename )
        imagecreatefrompng( string filename )
        imagecreatefromjpeg( string filename )
    3.2 绘画:
        //分配定义颜色
        $red = imagecolorallocate($im,255,0,0); //分配一个颜色

        //填充背景
        bool imagefill(resource image,int x,int y, int color ); //填充背景

        //画点
        bool imagesetpixel(resource image,int x,int y,int color );//画一个像素点

        //画一个线段的函数
        bool imageline ( resource image, int x1, int y1, int x2, int y2, int color )

        //画矩形框(不填充)
        bool imagerectangle ( resource image, int x1, int y1, int x2, int y2, int color )
        //画矩形框(填充)
        bool imagefilledrectangle ( resource image, int x1, int y1, int x2, int y2, int color )

        //绘制多边形
        bool imagepolygon ( resource image, array points, int num_points, int color )
        bool imagefilledpolygon ( resource image, array points, int num_points, int color )

        //绘制椭圆(正圆)
        imageellipse ( resource image, int cx, int cy, int w, int h, int color )
        imagefilledellipse ( resource image, int cx, int cy, int w, int h, int color )

        //绘制圆弧(可填充)
        imagearc ( resource image, int cx, int cy, int w, int h, int s, int e, int color)
        imagefilledarc ( resource image, int cx, int cy, int w, int h, int s, int e, int color, int style )

        //绘制字串
        bool imagestring ( resource image, int font, int x, int y, string s, int col )
        bool imagestringup ( resource image, int font, int x, int y, string s, int col )

        //绘制文本:
        *array imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text )
        当上面的字体出现乱码时,使用下面的函数转换编码
        string iconv ( string in_charset, string out_charset, string str )

        $name="张三";
        $str = iconv("ISO8859-1","UTF-8",$name);
        $str = iconv("GBK","UTF-8",$name);
        $str = iconv("GB2312","UTF-8",$name);


        //图片的裁剪、合成、缩放
        **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_h, int src_w, int src_h )

        * imagesx — 取得图像宽度
        * imagesy — 取得图像高度
        * array getimagesize ( string $filename [, array &$imageinfo ] ) 取得图像大小



     3.3.输出图
        header("Content-Type: image/jpeg");//设置响应头信息为一个jpeg的图片
        imagejpeg($im);//输出一个jpeg图片

        header("Content-Type: image/png");//设置响应头信息为一个png的图片
        imagepng($im);//输出一个png图片

        //输出到指定文件中(另存为)
        imagepng($im,"**.png");


    3.4.销毁
      imagedestroy($im); //
画一个验证码:

 1 <?php
 2 
 3 $type=1;
 4 $len=4;
 5 
 6 header("content-type:image/png");
 7 //测试
 8 newCode($type,$len);
 9 
10 /**
11 * 验证码函数    打印一个图片
12 * @param    int    $type    验证码类型1:纯数字;2:数字+小写;3:数字+小写+大写 
13 * @param    int    $len    验证码长度
14 */
15 function newCode($type=1,$len=4){
16 
17 $str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
18 
19 if($type==1){
20 $m=9;
21 }elseif($type==2){
22 $m=35;
23 }else{
24 $m=61;
25 }
26 $code="";
27 for($i=0;$i<$len;$i++){
28 $code .= $str[rand(0,$m)];    //获取验证码内容
29 }
30 
31 
32 $im=imagecreatetruecolor(50*$len,50);    //画布
33 
34 $bg=imagecolorallocate($im,230,230,230);    //背景
35 $hb=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));    //画笔
36 
37 imagefill($im,0,0,$bg);    //背景填充
38 
39 //添加噪点
40 for($i=0;$i<50*$len;$i++){
41 $hb=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
42 imagesetpixel($im,rand(0,50*$len),rand(0,50),$hb);
43 }
44 
45 //添加干扰线
46 for($i=0;$i<$len;$i++){
47 $hb=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
48 imageline($im,rand(0,50*$len),rand(0,50),rand(0,50*$len),rand(0,50),$hb);
49 }
50 
51 //画入验证码
52 for($i=0;$i<$len;$i++){
53 $hb=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
54 imagettftext($im,40,rand(-30,30),20+40*$i,44,$hb,"msyh.ttf",$code[$i]);
55 }
56 
57 //输出图像
58 imagepng($im);
59 //释放资源
60 imagedestroy($im);
61 
62 }
63 
64 ?>

 

以上是关于GD库的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 开启GD库

Linux 安装GD库

GD库镜像创建问题

gd 库创建的图像上未显示文本

使用 codeigniter 进行图像裁剪,没有 GD 库 - 安装了 GD2

GD库