zoukankan      html  css  js  c++  java
  • 【PHP】解析PHP的GD库

    官方文档:http://php.net/manual/en/book.image.php

    1.GD库简介

    PHP可以创建和操作多种不同格式的图像文件。PHP提供了一些内置的图像信息函数,也可以使用GD函数库创建和处理已有的函数库。目前GD2库支持GIF、JPEG、PNG和WBMP等格式。此外还支持一些FreeType、Type1等字体库。
    首先要在PHP的配置文件(php.ini)中打开php_gd2的扩展

    如果有其他的集成软件,可以直接勾选上php_gd2。笔者使用的wampserver,就可以直接勾选上php的php_gd2扩展:


    通常情况下,php_gd2扩展默认是开启的。

    通过gd_info()获得有关GD的详细信息

    <?php
    $gdinfoarr = gd_info();
    foreach($gdinfoarr as $e => $v){
       echo $e." = ".$v."<br/>";
    }
    ?>

    输出结果:

    GD Version = bundled (2.1.0 compatible)
    FreeType Support = 1
    FreeType Linkage = with freetype
    T1Lib Support =
    GIF Read Support = 1
    GIF Create Support = 1
    JPEG Support = 1
    PNG Support = 1
    WBMP Support = 1
    XPM Support = 1
    XBM Support = 1
    JIS-mapped Japanese Font Support = 

    其中1代表支持的功能,空代表不支持。从上面也可以看到GD库的版本信息。

    2.GD库图像的绘制步骤

    在PHP中创建一个图像通常应该完成4步:
    1.创建一个背景图像(也叫画布),以后的操作都是基于该图像
    2.在背景上绘制图像信息
    3.输出图像
    4.释放资源

    <?php       
        //1. 创建画布
        $im = imageCreateTrueColor(200, 200);              //建立空白背景
        $white = imageColorAllocate ($im, 255, 255, 255);    //设置绘图颜色
        $blue  = imageColorAllocate ($im, 0, 0, 64);
        //2. 开始绘画
        imageFill($im, 0, 0, $blue);                        //绘制背景
        imageLine($im, 0, 0, 200, 200, $white);            //画线
        imageString($im, 4, 50, 150, 'Sales', $white);      //添加字串
        //3. 输出图像
        header('Content-type: image/png');
        imagePng ($im);     //以 PNG 格式将图像输出
        //4. 释放资源
        imageDestroy($im);  
    ?>

    输出结果如下:

    3.绘制验证码功能

    上面我们已经了知道了GD库的基本使用,下面显示图片验证码功能

    login.html 文件

    <html>
        <head>
            <title> login </title>
        </head>
        <body>
            <div>
                <div><span>username:</span><span><input type="text"/></span></div>
                <div><span>password:</span><span><input type="password"></span></div>
                <div>
                    <span>verify:</span>
                    <span><input type="text"/></span>
                    <span><img alt="img" src="verifycode.php"></span>
                </div>
                <div>
                    <input type="submit" value="submit">
                </div>
            </div>
        </body>
    </html>

    verifycode.php 文件

    <?php
    //创建画布
    $im = imageCreateTrueColor(80, 40);
    
    //创建画笔
    $red = imageColorAllocate ($im, 255,0,0);
    $black = imageColorAllocate ($im, 0, 0, 0);
    
    //将整个画布铺为红色
    imagefill($im, 0, 0, $red);
    
    $verify = "";
    do{
        $v = rand(0, 9);
        $verify = $verify.$v;//.表示字符串拼接符,将原有的验证数字和新的验证数字拼接起来
    }while( strlen($verify) < 4 );
    
    $_SESSION["verifycode"] = $verify;//将值存储到SESSION变量中
    
    $font = 'arial.ttf';
    imagettftext($im, 20, 0, 10,30, $black,$font,$verify);//将验证码绘制到画布上
    
    header('Content-type: image/png');
    imagePng ($im);     //以 PNG 格式将图像输出
    
    //释放资源
    imageDestroy($im);

    然后访问 http://localhost/Test/login.html
    效果图:

    这里的验证码很“规矩”,可以对上面的验证码拓展,比如渐变背景,干扰线,多种文字,文字旋转,不同字体 等等。

  • 相关阅读:
    【总结整理】javascript的函数在if中调用时是否加括号---与.net的不同之处
    【总结整理】javascript的函数调用时是否加括号
    【总结整理】JavaScript的DOM事件学习(慕课网)
    关于overflow:hidden (转)
    CSS
    HTML
    jQuery
    函数
    装饰器
    python的条件与循环1
  • 原文地址:https://www.cnblogs.com/HDK2016/p/10213831.html
Copyright © 2011-2022 走看看