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 .= "�";
} 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);
}
正文到此结束