原创

PHP-lib-image.func.php-GD库(图像处理)

1、list($src_w,$src_h,$imagetype)=getimagesize($filename);
getimagesize()返回
Array
    (
        [0] => 133
        [1] => 170
        [2] => 2
        [3] => width="133" height="170"
        [bits] => 8
        [channels] => 3
        [mime] => image/jpeg
    )

2、$mime=image_type_to_mime_type($imagetype);
3、imagecreatetruecolor($width, $height)//返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像

image.func.php

<?php
require_once 'string.func.php';
/**
 * 通过GD库做验证码
 * @param  $type 1-3 数字、字母、字母和数字
 * @param  $length 验证码个数
 * @param  $pixel 干扰点
 * @param  $line 干扰直线
 * @param  $sess_name 保存到session中的key
 */
function verifyImage($type=1,$length=4,$pixel =0,$line=0,$sess_name="verify"){
    //session_start();
    //创建画布
    $width =80;
    $height=28;
    $image = imagecreatetruecolor($width, $height);
    $white = imagecolorallocate($image, 255, 255, 255);
    //画笔颜色
    $black = imagecolorallocate($image, 0, 0, 0);
    //用填充矩形填充画布
    imagefilledrectangle($image, 1, 1, $width-2, $height-2, $white);

    $chars = buildRandomString($type,$length);
    //    echo '随机值'+$chars;
    //    exit();
    //保存到session中

    $_SESSION[$sess_name]=$chars;
    $fontfiles=array("MSYH.TTF","MSYHBD.TTF","SIMKAI.TTF","SIMSUN.TTC","STZHONGS.TTF");
    for ($i=0;$i<$length;$i++){
        $size = mt_rand(14,18);//返回随机整数
        $angle = mt_rand(-15, 15);
        $x=5+$i*$size;
        $y=mt_rand(20, 26);
        $fontfile="..".DIRECTORY_SEPARATOR."fonts".DIRECTORY_SEPARATOR.$fontfiles[mt_rand(0, count($fontfiles)-1)];
        //$fontfile="../fonts/".$fontfiles[mt_rand(0, count($fontfiles)-1)];
        //$fontfile="MSYH.TTF";
        //echo '$fontfile'.$fontfile;
        //exit();
        //随机颜色
        $color=imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 120), mt_rand(90, 180));
        $text =substr($chars, $i,1);
        //$text=    to_entities($text);
        imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
    }

    if($pixel){
        for($i=0;$i<50;$i++){
            imagesetpixel($image, mt_rand(0, $width-1), mt_rand(0, $height-1), $black);
        }
    }
    if($line){
        for($i=0;$i<$line;$i++){
            //随机颜色
            $color=imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 120), mt_rand(90, 180));
            imageline($image,  mt_rand(0, $width-1), mt_rand(0, $height-1), mt_rand(0, $width-1), mt_rand(0, $height-1), $color);
        }
    }
    header("content-type:image/gif");//.$mime
    imagegif($image);
    imagedestroy($image);//销毁图像资源
}

//Test 正式使用时一定要注释掉
//verifyImage();
/*verifyImage(1,4,10,2);*/

/**
 * 说明:用于处理imagettftext 中文乱码(似乎不加也行)
 * 
 * @param unknown_type $string
 * @return Ambigous <string, unknown>
 * 创建时间:2058-3-19 下午12:01:26
 */
function to_entities($string){
    $len = strlen($string);
    $buf = "";
    for($i = 0; $i < $len; $i++){
        if (ord($string[$i]) <= 127){
            $buf .= $string[$i];
        } else if (ord ($string[$i]) <192){
            //unexpected 2nd, 3rd or 4th byte
            $buf .= "&#xfffd";
        } else if (ord ($string[$i]) <224){
            //first byte of 2-byte seq
            $buf .= sprintf("&#%d;",
            ((ord($string[$i + 0]) & 31) << 6) +
            (ord($string[$i + 1]) & 63)
            );
            $i += 1;
        } else if (ord ($string[$i]) <240){
            //first byte of 3-byte seq
            $buf .= sprintf("&#%d;",
            ((ord($string[$i + 0]) & 15) << 12) +
            ((ord($string[$i + 1]) & 63) << 6) +
            (ord($string[$i + 2]) & 63)
            );
            $i += 2;
        } else {
            //first byte of 4-byte seq
            $buf .= sprintf("&#%d;",
            ((ord($string[$i + 0]) & 7) << 18) +
            ((ord($string[$i + 1]) & 63) << 12) +
            ((ord($string[$i + 2]) & 63) << 6) +
            (ord($string[$i + 3]) & 63)
            );
            $i += 3;
        }
    }
    return $buf;
}
function testInvoke(){
    echo '<script type="text/javascript"> alert("testInvoke"); </script>';
}

/**
 * 说明:生成缩略图
 * 
 * @param string $filename
 * @param string $destination
 * @param int $dst_w
 * @param int $dst_h
 * @param bool $isReservedSource
 * @param float or number? $scale
 * @return string
 * 创建时间:2058-4-8 上午09:28:49
 */

function thumb($filename,$destination=null,$dst_w=null,$dst_h=null,$isReservedSource=true,$scale=0.5){
    list($src_w,$src_h,$imagetype)=getimagesize($filename);
    if(is_null($dst_w)||is_null($dst_h)){
        $dst_w=ceil($src_w*$scale);//向上取整
        $dst_h=ceil($src_h*$scale);//向上取整
    }
    $mime = image_type_to_mime_type($imagetype);
    //image/jpeg :接下来要对这个mime类型做处理 来自动获取函数方法名
    $createFun = str_replace("/", "createfrom", $mime);
    $outFun= str_replace("/", null, $mime);

    $src_image = $createFun($filename);
    //创建画布资源
    $dst_image = imagecreatetruecolor($dst_w, $dst_h);///返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像
    //重采样图片并拷贝
    imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
    //image_50/xxxx.jpg
    if($destination && !file_exists(dirname($destination))){//dirname() 函数返回路径中的目录部分。
        mkdir(dirname($destination),0777,true);
    }
    $dstFilename=$destination==null?getUniName().".".getExt($filename):$destination;
    $outFun($dst_image,$dstFilename);
    imagedestroy($src_image);
    imagedestroy($dst_image);


    if(!$isReservedSource){//删除源文件
        unlink($filename);
    }
    return $dstFilename;
}



/**
 * 说明:添加文字水印
 * 
 * @param string $filename
 * @param string $text
 * @return string
 * 创建时间: 下午8:56:00
 */
function waterText($filename,$text="jiangjiesheng.com",$fontfile= "MSYH.TTF"){
    $fileInfo = getimagesize($filename);//宽高 和mime
    //$imageheight=$fileInfo['height'];
    //print_r($fileInfo);
    /*Array
     (
     [0] => 133
     [1] => 170
     [2] => 2
     [3] => width="133" height="170"
     [bits] => 8
     [channels] => 3
     [mime] => image/jpeg
     )*/
    //exit;

    $widthX=$fileInfo[0];
    $heightY=$fileInfo[1];

    $mime = $fileInfo['mime'];
    $createFun =str_replace("/", "createfrom", $mime);//imagecreatefromjpg
    $outFun = str_replace("/", null, $mime);//imagejpg
    $image=$createFun($filename);
    $color = imagecolorallocatealpha($image, 255, 0, 0,50);
    $fontfile= "../fonts/{$fontfile}";
    imagettftext($image, 14, 0, $widthX-180, $heightY-50, $color, $fontfile, $text);//这里应该要对文字和图片大小进行判断
    //header("content-type:".$mime);
    $outFun($image,$filename);
    imagedestroy($image);
}

/**
 * 说明:添加图片水印
 * 
 * @param string $dstFile
 * @param string $srcFile
 * @param int $pct 合并度 相当于$srcFile的透明度
 * @return string
 * 创建时间: 下午8:56:00
 */
function waterPic($dstFile,$srcFile='../images/jiangjiesheng.com.png',$pct=30){
    $srcFileInfo=getimagesize($srcFile);
    $dstFileInfo=getimagesize($dstFile);

    $src_w=$srcFileInfo[0];
    $src_h=$srcFileInfo[1];

    $dst_w=$dstFileInfo[0];
    $dst_h=$dstFileInfo[1];

    $srcMime=$srcFileInfo['mime'];
    $dstMime=$dstFileInfo['mime'];

    $createSrcFun = str_replace("/", "createfrom", $srcMime);
    $createDstFun = str_replace("/", "createfrom", $dstMime);

    $outDstFun=str_replace("/", null, $dstMime);

    $src_im= $createSrcFun($srcFile);
    $dst_im= $createDstFun($dstFile);

    //合并图片
    imagecopymerge($dst_im, $src_im, $dst_w-$src_w,$dst_h-$src_h,0,0, $src_w, $src_h, $pct);

    //header("Content-Type:".$srcFileInfo['mime']);

    $outDstFun($dst_im,$dstFile);//注意有$开头
    imagedestroy($src_im);
    imagedestroy($dst_im);
}
正文到此结束
本文目录