php图片上传加水印,自动增加水印
这是一款完美的php文件上传代码,图片上传成功后并自动给图片增加上水印,这样很好的快速的提高的了要手工一张张增加水印效果,代码如下:
<?php
function upload($uploadfile, $watermark = 1, $watertype = 1, $content) {
foreach ($uploadfile['name'] as $key => $name) { //多文件上传函数
uploadall($uploadfile, $key, $watermark, $watertype, $content);
}
}
function uploadall($uploadfile, $i, $watermark, $watertype, $content) {
$watermark = $watermark; //是否附加水印(1为加水印,其他为不加水印);
$watertype = $watertype; //水印类型(1为文字,2为图片)
$watercontent = $content; //水印的内容
if (emptyempty($uploadfile['name'][$i])) {
die("未选择文件上传");
}
if ($uploadfile['error'][$i] == 2) { //验证html判断结果
die("上传的文件太大了");
}
$allow_filemaxsize = 2048000; // 2m
$filesize = $uploadfile['size'][$i];
if ($filesize > $allow_filemaxsize) {
die("上传的文件太大了");
}
$allow_filetypes = array(
"jpeg",
"gif",
"png",
"jpg",
"pjpeg"
); //允许上传的文件统一资源类型 mimetype
$allow = false; //默认都不允许
$mimetype = $uploadfile['type'][$i]; //上传文件的mime文件类型
foreach ($allow_filetypes as $t) {
if (strpos($mimetype, $t) !== false) {
$allow = true; //找到了符合上传条件的文件类型
break;
}
}
if ($allow == false) {
die("上传的文件类型不被允许");
}
$result = is_uploaded_file($uploadfile['tmp_name'][$i]); //判断是否为上传动作产生的
if (!$result) {
die("上传的文件有误");
}
$uploaddir = "img/"; //上传文件保存目录
if (!file_exists($uploaddir)) mkdir($uploaddir, 0777, true); //若上传保存目录不存在,则递归创建
/**重命名文件**/
$filetype = explode(".", $uploadfile['name'][$i]);
$filetype = array_pop($filetype);
$uploadfilename = time() . "." . $filetype;
$_session['filename'] = $uploadfilename;
//end
$result = move_uploaded_file($uploadfile['tmp_name'][$i], $uploaddir . $uploadfilename);
if ($result) {
echo "文件上传成功";
} else {
switch ($uploadfile['error'][$i]) {
case 1:
return "上传的文件超出了php.ini中设定的最大值";
break;
case 2:
return "上传的文件超出了html中设定的最大值";
break;
case 3:
return "文件只有部分被上传";
break;
case 4;
return "没有文件被上传";
break;
default:
die("文件上传失败");
}
}
if ($watermark == 1) {
$iinfo = getimagesize($uploaddir . $uploadfilename); //获取图片的相关信息,得到数组
$nimage = imagecreatetruecolor($iinfo[0], $iinfo[1]);
$white = imagecolorallocate($nimage, 255, 255, 255); //设置背景颜色为白色
$black = imagecolorallocate($nimage, 0, 0, 0); //设置背景颜色为黑色
$red = imagecolorallocate($nimage, 255, 0, 0); //设置背景颜色为红色
imagefill($nimage, 0, 0, $white); //背景填充为白色
switch ($iinfo[2]) {
case 1:
$simage = imagecreatefromgif($uploaddir . $uploadfilename);
break;
case 2:
$simage = imagecreatefromjpeg($uploaddir . $uploadfilename);
break;
case 3:
$simage = imagecreatefrompng($uploaddir . $uploadfilename);
break;
case 6:
$simage = imagecreatefromwbmp($uploaddir . $uploadfilename);
break;
default:
die("不支持的文件类型");
exit;
}
imagecopy($nimage, $simage, 0, 0, 0, 0, $iinfo['0'], $iinfo['1']);
switch ($watertype) {
case 1: //加水印字符串
imagestring($nimage, 5, $iinfo['0'] / 2 - 50, $iinfo['1'] - 30, $watercontent, $black);
break;
case 2: //加水印图片
$simage1 = imagecreatefromgif($watercontent);
$size = getimagesize($watercontent);
imagecopy($nimage, $simage1, $iinfo['0'] / 2 + 50, $iinfo['1'] - 100, 0, 0, $size[0], $size[1]);
imagedestroy($simage1);
break;
}
switch ($iinfo[2]) {
case 1:
imagejpeg($nimage, $uploaddir . $uploadfilename); //将图像$nimage以$destination文件名创建一个jpeg的格式文件
break;
case 2:
imagejpeg($nimage, $uploaddir . $uploadfilename);
break;
case 3:
imagepng($nimage, $uploaddir . $uploadfilename);
break;
case 6:
imagewbmp($nimage, $uploaddir . $uploadfilename);
break;
}
imagedestroy($nimage); //覆盖原上传文件
imagedestroy($simage);
}
}
if (@$_get['act'] == "insert") { //未作参数校验
//该函数的四个参数分别是:上传控件的name值;是否加水印(1为加,其他数字为不佳);
//水印的类型(1为字符串,2为图片);水印的内容,字符串时写数据,图片时写图片的地址;
$picture = upload($_files['picture'], 1, 2, "img/watermark.gif"); //上传文件,并返回上传后的文件路径名
}
?>上传代码如下:
<form method="post" action="" enctype="multipart/form-data"> <table border="1" cellpadding="5" cellspacing="0"> <tr> <td>产品图片:</td> <td><input type="hidden" name="max_file_size" value="1024000"> <input type="file" name="picture[]"> </td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="提交"></td> </tr> </table> </form>
教程地址:http://www.phprm.com/tuxiang/fs5109.html
欢迎转载!但请带上文章地址^^