php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
<div class="codetitle">@L_502_0@ 代码如下:
<div class="codebody" id="code17158">
<?
PHP //
上传文件类型列表
$uptypes=array(
'image/jpg',
'image/jpeg',
'image/png',
'image/pjpeg',
'image/gif',
'image/bmp',
'image/x-png'
);
$max_file_size = 200000; //
上传文件大小限制,单位BYTE
$path_im = "prod_img/"; //
生成大图保存
文件夹路径
$path_sim = "prod_simg/"; //
缩略图保存
文件夹路径
$watermark = 1; //是否加水印(1为加水印,其他为不加水印);
$watertype = 1; //水印类型(1为
文字,2为
图片)
$waterstring = "[url=
http://www.jy17.com/]http://www.jy17.com/[/url]"; //水印字符串
$waterimg = "water.png"; //水印
图片文件路径
$waterclearly = 100; //水印透明度0-100,数字小透明高
$imclearly = 100; //
图片清晰度0-100,数字越大越清晰,
文件尺寸越大
$simclearly = 75; //
缩略图清晰度0-100,数字越大越清晰,
文件尺寸越大
$smallmark = 1; //是否
生成缩略图(1为加
生成,其他为不);
$dst_sw = 80; //定义
缩略图宽度,高度我采用等比例缩放,所以只要比较宽度就可以了
?>
<form enctype="multipart/form-data" method="post" name="upform">
上传文件:
<input name="upfile" type="file">
<input type="submit" value="
上传">
允许
上传的
文件类型为:<?=implode(',',$uptypes)?>
<?
PHP if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (!is_uploaded_file($_FILES["upfile"][tmp_name]))
//是否存在
文件 {
echo "
图片不存在!";
exit;
}
$file = $_FILES["upfile"];
if($max_file_size < $file["size"])
//检查
文件大小
{ $max_file_size = $max_file_size/1000;
echo "
文件太大,超过 ".$max_file_size." KB!";
exit;
}
if(!in_array($file["type"],$uptypes))
//检查
文件类型
{
echo "
文件类型不符!".$file["type"];
exit;
}
if(!file_exists($path_im))
//检查
上传目录是否存在,不存在创建
{
mkdir($path_im);
}
if(!file_exists($path_sim))
//检查
缩略图目录是否存在,不存在创建
{
mkdir($path_sim);
}
$filename = $file["tmp_name"];
$im_size = getimagesize($filename);
$src_w = $im_size[0];
$src_h = $im_size[1];
$src_type = $im_size[2];
$pinfo = pathinfo($file["name"]);
$filetype = $pinfo['extension'];
$all_path = $path_im.time().".".$filetype; //路径+
文件名,目前以
上传时间命名
if (file_exists($all_path))
{
echo "同名
文件已经存在了";
exit;
}
if(!move_uploaded_file ($filename,$all_path))
{
echo "移动
文件出错";
exit;
}
$pinfo = pathinfo($all_path);
$fname = $pinfo[basename];
echo "
已经成功上传文件名:
".$all_path."";
echo "宽度:".$src_w."px ";
echo "长度:".$src_h."px ";
echo "
大小:".$file["size"]." bytes";
switch($src_type)//判断源
图片文件类型
{
case 1://gif
$src_im = imagecreatefromgif($all_path);//从源
图片文件取得图像
break;
case 2://jpg
$src_im = imagecreatefromjpeg($all_path);
break;
case 3://png
$src_im = imagecreatefrompng($all_path);
break;
//case 6:
//$src_im=imagecreatefromwbmp($all_path);
//break;
default:
die("
不支持的
文件类型");
exit;
}
if($watermark == 1)
{
//$iinfo = getimagesize($all_path,$iinfo);
$dst_im = imagecreatetruecolor($src_w,$src_h);
//根据原图尺寸创建一个相同大小的真
彩色位图
$white = imagecolorallocate($dst_im,255,255);//白
//给新图填充背景色
$black = imagecolorallocate($dst_im,0);//黑
$red = imagecolorallocate($dst_im,0);//红
$orange = imagecolorallocate($dst_im,85,0);//橙
imagefill($dst_im,$white);
imagecopymerge($dst_im,$src_im,$src_w,$src_h,100);//原图图像写入新建真彩位图中
//imagefilledrectangle($dst_im,1,$src_h-15,80,$white);
switch($watertype)
{
case 1: //加水印字符串
imagestring($dst_im,5,$src_h-20,$waterstring,$orange);//
文字水印,字体5号颜色橙色,位于背景图左下角
break;
case 2: //加水印
图片 $lim_size = getimagesize($waterimg); //取得水印图像尺寸,信息
switch($lim_size[2]) //判断水印
图片文件类型
{
case 1://gif
$src_lim = imagecreatefromgif($waterimg); //取得水印图像
break;
case 2://jpg
$src_lim = imagecreatefromjpeg($waterimg);
break;
case 3://png
$src_lim = imagecreatefrompng($waterimg);
break;
//case 6:
//$src_im=imagecreatefromwbmp($waterimg);
//break;
default:
die("
不支持的
文件类型");
exit;
}
$src_lw = ($src_w-$lim_size[0])/2; //水印位于背景图正中央width定位
$src_lh = ($src_h-$lim_size[1])/2; //height定位
imagecopymerge($dst_im,$src_lim,$src_lw,$src_lh,$lim_size[0],$lim_size[1],$waterclearly);// 合并两个图像,设置水印透明度$waterclearly
imagedestroy($src_lim);
break;
}
switch($src_type)
{
case 1:
imagegif($dst_im,$all_path,$imclearly);//
生成gif
文件,
图片清晰度0-100
break;
case 2:
imagejpeg($dst_im,$imclearly);//
生成jpg
文件,
图片清晰度0-100
break;
case 3:
imagepng($dst_im,$imclearly);//
生成png
文件,
图片清晰度0-100
break;
//case 6:
//imagewbmp($dst_im,$all_path);
break;
}
//释放缓存
imagedestroy($dst_im);
}
if($smallmark == 1)
{
$sall_path = $path_sim.time().".".$filetype;
if (file_exists($sall_path))
{
echo "同名
文件已经存在了";
exit;
}
if($src_w <= $dst_sw) // 原图尺寸 <=
缩略图尺寸
{
$dst_sim = imagecreatetruecolor($src_w,$src_h); //新建
缩略图真彩位图
imagecopymerge($dst_sim,100); //原图图像写入新建真彩位图中
}
if($src_w > $dst_sw) // 原图尺寸 >
缩略图尺寸
{
$dst_sh = $dst_sw/$src_w
$src_h;
$dst_sim = imagecreatetruecolor($dst_sw,$dst_sh); //新建缩略图真彩位图(等比例缩小原图尺寸)
imagecopyresampled($dst_sim,$dst_sw,$dst_sh,$src_h); //原图图像写入新建真彩位图中
}
switch($src_type)
{
case 1:
imagegif($dst_sim,$sall_path,$simclearly);//生成gif文件,图片清晰度0-100
break;
case 2:
imagejpeg($dst_sim,$simclearly);//生成jpg文件,图片清晰度0-100
break;
case 3:
imagepng($dst_sim,$simclearly);//生成png文件,图片清晰度0-100
break;
//case 6:
//imagewbmp($dst_sim,$sall_path);
break;
}
//释放缓存
imagedestroy($dst_sim);
}
//释放缓存
imagedestroy($src_im);
}
?>