<?php
$charset = 'utf-8';
header("content-type:text/html;charset=".$charset);
/******************************************************************************
参数说明:
$max_file_size : 上传文件大小限制, 单位BYTE
$destination_folder : 上传文件路径
$watermark : 是否附加水印(1为加水印,其他为不加水印);
使用说明:
1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
2. 将extension_dir =改为你的php_gd2.dll所在目录;
******************************************************************************/
//上传文件类型列表
$uptypes=array(
'image/jpg',
'image/jpeg',
'image/png',
'image/pjpeg',
'image/gif',
'image/bmp',
'image/x-png'
);
$max_file_size=2000000; //上传文件大小限制, 单位BYTE
$destination_folder="uploadimg/"; //上传文件路径
$watermark=1; //是否附加水印(1为加水印,其他为不加水印);
$watertype=1; //水印类型(1为文字,2为图片)
$waterposition=5; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);
$waterstring= "http://sunshiyan.com"; //水印字符串
$waterimg="xplore.gif"; //水印图片
$imgpreview=1; //是否生成预览图(1为生成,其他为不生成);
$imgpreviewsize=1; //缩略图比例
?>
<html>
<head>
<title>图片上传程序</title>
<style type="text/css">
<!--
body
{
font-size: 9pt;
}
input
{
background-color: #66CCFF;
border: 1px inset #CCCCCC;
}
-->
</style>
</head>
<body>
<form enctype="multipart/form-data" method="post" name="upform">
上传文件:
<input name="upfile" type="file">
<input type="submit" value="上传"><br>
允许上传的文件类型为:<?=implode(', ',$uptypes)?>
</form>
<?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"])//实际文件大小与设置文件大小进行比较
//检查文件大小
{
echo "文件太大!";
exit;
}
if(!in_array($file["type"], $uptypes))//判断上传的文件类型是否是被允许的……
//检查文件类型
{
echo "文件类型不符!".$file["type"];
exit;
}
if(!file_exists($destination_folder))//判断要上传的目录是否已经存在
{
mkdir($destination_folder);
}
$filename=$file["tmp_name"];//取得文件的名字
$image_size = getimagesize($filename);//获取该文件的长宽信息
$pinfo=pathinfo($file["name"]);//将路径信息赋值给一个变量
$ftype=$pinfo['extension'];//获得文件的扩展名
$destination = $destination_folder.time().".".$ftype;//设置上传的路径/生成新文件名
if (file_exists($destination) && $overwrite != true)//如文件已经存在并且,文件不可写
{
echo "同名文件已经存在了";
exit;
}
if(!move_uploaded_file ($filename, $destination))//移动选择的文件到设定的上传目录中
{
echo "移动文件出错";
exit;
}
$pinfo=pathinfo($destination);//将设置好的目录给赋值$pathinfo变量
$fname=$pinfo[basename];//获得路径中的文件名
echo " <font color=red>已经成功上传</font><br>文件名: <font color=blue>".$destination_folder.$fname."</font><br>";
echo " 宽度:".$image_size[0];
echo " 长度:".$image_size[1];
echo "<br> 大小:".$file["size"]." bytes";
if($watermark==1)//是否加水印1为加0为不加
{
$iinfo=getimagesize($destination,$iinfo);//获得此路径中文件的大小(即上传的这个图片的size信息)
$nimage=imagecreatetruecolor($image_size[0],$image_size[1]);//建立长,宽,的画布
$white=imagecolorallocate($nimage,255,255,255);//imagecolorallocate(hanle/画布名,红,绿,蓝)
$black=imagecolorallocate($nimage,0,0,0);
$red=imagecolorallocate($nimage,255,0,0);
imagefill($nimage,0,0,$white);//画布用白色填充imagefill(画布名,横坐标,纵坐标,颜色)
switch ($iinfo[2])
{
case 1:
$simage =imagecreatefromgif($destination);//建立gif图片
break;
case 2:
$simage =imagecreatefromjpeg($destination);//建立jpeg图片
break;
case 3:
$simage =imagecreatefrompng($destination);//建立png图片
break;
case 6:
$simage =imagecreatefromwbmp($destination);//建立bmp图片
break;
default:
die("不支持的文件类型");
exit;
}
imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
// 新建画布,新建图象
//bool imagecopy ( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )
//
//将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。
//imagefilledrectangle($nimage,1,$image_size[1]-15,180,$image_size[1],null);
//ImageFilledRectangle --- 建立一個矩形並且填滿顏色
//語法 : int imagefilledrectangle (int im, int x1, int y1, int x2, int y2, int col)
//ImageFilledRectangle( )在圖形 im中,建立一個填滿顏色 col的矩形,從左上方的坐標 x1,y1到右下方的坐標 x2,y2,
//坐標 0,0是圖形的左上角。
switch($watertype)//选择水印类型
{
case 1: //加水印字符串
imagestring($nimage,5,30,$image_size[1]-15,$waterstring,$white);
imagettftext($nimage,12,4,100,100,$red,"simsun.ttc",$waterstring);
imagettftext($nimage,12,1,380,430,$red,"simsun.ttc",$waterstring);
imagettftext($nimage,12,4,22,430,$white,"simsun.ttc",$waterstring);
//语法: int imagestring(int im, int font, int x, int y, string s, int col);
//本函式在图片上绘出水平的横式字串。参数 font 为字形,设为 1 到 5 表示使用内定字形。
//参数 x、y 为字串起点坐标。字串的内容放在参数 s 上。参数 col 表示字串的颜色。
break;
case 2: //加水印图片
$simage1 =imagecreatefromgif($waterimg);
imagecopy($nimage,$simage1,0,0,0,0,128,128);
imagedestroy($simage1);
break;
}
switch ($iinfo[2])
{
case 1:
imagegif($nimage, $destination);//将jpg图片输出到浏览器
break;
case 2:
imagejpeg($nimage, $destination);
break;
case 3:
imagepng($nimage, $destination);//将png图片输出到浏览器
break;
case 6:
imagewbmp($nimage, $destination);//将bmp图片输出的浏览器
break;
}
//覆盖原上传文件
imagedestroy($nimage);
imagedestroy($simage);
}
if($imgpreview==1)
{
echo "<br>图片预览:<br>";
echo "<img src=\"".$destination."\" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);
echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">";
}
}
?>
</body>
</html> 版权声明:《 php 上传文件并添加水印 》为zhangkang原创文章,转载请注明出处!
最后编辑:2019-5-5 20:05:13