阅读背景:

PHP GD库常用功能封装

来源:互联网 

PHP GD库常用功能封装


<?php
class Wu_GD
{
    /**
     * 数字验证码
     * $num 验证码长度
     * $w   图片宽度
     * $h   图片高度
     * 校验此验证码需要使用 $_SESSION['hello_num'] = $_POST['auto_coe']
     */
    public static function code($num, $w, $h, $key)
    {
        $code = "";
        for ($i = 0; $i < $num; $i++) {
            $code .= rand(0, 9);
        }
        //4位验证码也可以用rand(1000,9999)直接生成
        //将生成的验证码写入session,备验证页面使用
        $_SESSION[$key] = $code;
        //创建图片,定义颜色值
        Header("Content-type: image/PNG");
        $im = imagecreate($w, $h);
        $black = imagecolorallocate($im, 0, 0, 0);
        $gray = imagecolorallocate($im, 200, 200, 200);
        $bgcolor = imagecolorallocate($im, 255, 255, 255);

        imagefill($im, 0, 0, $gray);

        //画边框
        imagerectangle($im, 0, 0, $w-1, $h-1, $black);

        //随机绘制两条虚线,起干扰作用
        $style = array ($black,$black,$black,$black,$black,$gray,$gray,$gray,$gray,$gray);
        imagesetstyle($im, $style);
        $y1 = rand(0, $h);
        $y2 = rand(0, $h);
        $y3 = rand(0, $h);
        $y4 = rand(0, $h);
        imageline($im, 0, $y1, $w, $y3, IMG_COLOR_STYLED);
        imageline($im, 0, $y2, $w, $y4, IMG_COLOR_STYLED);

        //在画布上随机生成大量黑点,起干扰作用;
        for ($i = 0; $i < 80; $i++) {
            imagesetpixel($im, rand(0, $w), rand(0, $h), $black);
        }
        //将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成
        $strx = rand(3, 8);
        for ($i = 0; $i < $num; $i++) {
            $strpos = rand(1, 6);
            imagestring($im, 5, $strx, $strpos, substr($code, $i, 1), $black);
            $strx += rand(8, 12);
        }
        imagepng($im);
        imagedestroy($im);
    }

    /**
     * 图片裁剪
     * $source 原图
     * $dst_w 目标宽度
     * $dst_h 目标高度
     * $dst_path    裁剪后的文件名
     */
    public static function cut($source, $dst_w, $dst_h, $dst_path='')
    {
        if (empty($dst_path)) {
            $info = pathinfo($source);
            $dst_path = $info['dirname'].'/'.$info['filename'].'_s.'.$info['extension'];
        }
        list($src_w,$src_h)=getimagesize($source);  // 获取原图尺寸
        $dst_scale = $dst_h/$dst_w; //目标图像长宽比
        $src_scale = $src_h/$src_w; // 原图长宽比

        if($src_scale>=$dst_scale) {  // 过高
            $w = intval($src_w);
            $h = intval($dst_scale*$w);
            $x = 0;
            $y = ($src_h - $h)/3;
        } else { // 过宽
            $h = intval($src_h);
            $w = intval($h/$dst_scale);
            $x = ($src_w - $w)/2;
            $y = 0;
        }
        // 剪裁
        $source = imagecreatefromjpeg($src_img);
        $croped = imagecreatetruecolor($w, $h);
        imagecopy($croped,$source,0,0,$x,$y,$src_w,$src_h);

        // 缩放
        $scale = $dst_w/$w;
        $target = imagecreatetruecolor($dst_w, $dst_h);
        $final_w = intval($w*$scale);
        $final_h = intval($h*$scale);
        imagecopysampled($target,$croped,0,0,0,0,$final_w,$final_h,$w,$h);
        // 保存
        $timestamp = time();
        imagejpeg($target, $dst_path);
        imagedestroy($target);
    }
}
<?php
class Wu_GD
{
    /



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: