主题: 哈哈 终于解决了上传加水印的问题 把源码帖出来
作者: 冬夜微风, 发布日期: 2011-06-11 18:07:39, 浏览数: 4703

修改原来的upload_json.php文件

 

<?php
/**
* KindEditor PHP
* 
* 本PHP程序是演示程序,建议不要直接在实际项目中使用。
* 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。
* 
*
*关于加水印的地方有几个地方要设置一下啊!!!!!!! 具体在下部分 自己找一下。
*
*/

require_once 'JSON.php';
$php_path = dirname(__FILE__) . '/';
$php_url = dirname($_SERVER['PHP_SELF']) . '/';

//文件保存目录路径
$save_path = $php_path . '../../../attached/';
//文件保存目录URL
$save_url = $php_url . '../../../attached/';
//定义允许上传的文件扩展名
$ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
//最大文件大小
$max_size = 1000000;

$save_path = realpath($save_path) . '/';

//有上传文件时
if (empty($_FILES) === false) {
//原文件名
$file_name = $_FILES['imgFile']['name'];
//服务器上临时文件名
$tmp_name = $_FILES['imgFile']['tmp_name'];
//文件大小
$file_size = $_FILES['imgFile']['size'];

$image_size = getimagesize($tmp_name);

//检查文件名
if (!$file_name) {
alert("请选择文件。");
}
//检查目录
if (@is_dir($save_path) === false) {
alert("上传目录不存在。");
}
//检查目录写权限
if (@is_writable($save_path) === false) {
alert("上传目录没有写权限。");
}
//检查是否已上传
if (@is_uploaded_file($tmp_name) === false) {
alert("临时文件可能不是上传文件。");
}
//检查文件大小
if ($file_size > $max_size) {
alert("上传文件大小超过限制。");
}
//获得文件扩展名
$temp_arr = explode(".", $file_name);
$file_ext = array_pop($temp_arr);
$file_ext = trim($file_ext);
$file_ext = strtolower($file_ext);
//检查扩展名
if (in_array($file_ext, $ext_arr) === false) {
alert("上传文件扩展名是不允许的扩展名。");
}
//创建文件夹
$ymd = date("Ymd");
$save_path .= $ymd . "/";
$save_url .= $ymd . "/";
if (!file_exists($save_path)) {
mkdir($save_path);
}
//新文件名
$new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;
//移动文件
$file_path = $save_path . $new_file_name;
if (move_uploaded_file($tmp_name, $file_path) === false) {
alert("上传文件失败。");
}


//@chmod($file_path, 0644);
$file_url = $save_url . $new_file_name; 

$watermark=1; //是否附加水印(1为加水印,其他为不加水印);
$watertype=2; //水印类型(1为文字,2为图片)
$waterstring="http://www.168hs.cn/"; //水印字符串
$waterimg="http://localhost:83/images/mark.gif"; //水印图片,试了相对路不行,只好用绝对路径。

if($watermark==1)
{
$myfilename="../../../attached/".$ymd."/".$new_file_name; 
$iinfo=getimagesize($myfilename,$iinfo); 
$nimage=imagecreatetruecolor($image_size[0],$image_size[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($myfilename);
break;
case 2:
$simage =imagecreatefromjpeg($myfilename);
break;
case 3:
$simage =imagecreatefrompng($myfilename);
break;
case 6:
$simage =imagecreatefromwbmp($myfilename);
break;
default:
die("不支持的文件类型");
exit;
}

imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);

switch($watertype)
{
case 1: //加水印字符串
imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);
break;
case 2: //加水印图片
$simage1 =imagecreatefromgif($waterimg);
imagecopymerge($nimage,$simage1,$image_size[0]-150,$image_size[1]-50,0,0,150,50,60); //设置水印的位置 
imagedestroy($simage1);
break;
}

switch ($iinfo[2])
{
case 1:
//imagegif($nimage, $destination);
imagejpeg($nimage, $myfilename);
break;
case 2:
imagejpeg($nimage, $myfilename);
break;
case 3:
imagepng($nimage, $myfilename);
break;
case 6:
imagewbmp($nimage,$myfilename);
//imagejpeg($nimage, $destination);
break;
}

//覆盖原上传文件
imagedestroy($nimage);
imagedestroy($simage);
}

header('Content-type: text/html; charset=UTF-8');
$json = new Services_JSON();
echo $json->encode(array('error' => 0, 'url' => $file_url));
exit;
}

function alert($msg) {
header('Content-type: text/html; charset=UTF-8');
$json = new Services_JSON();
echo $json->encode(array('error' => 1, 'message' => $msg));
exit;
}
?>

作者: Roddy, 发布日期: 2011-06-11 19:32:58
谢谢分享,我把这个帖子移动到经验共享里。
回复
作者: jbllqz, 发布日期: 2011-08-11 20:49:16
回复Roddy:求救啊~,为什么我选择水印是图片的时候竟然上传时是“服务器发生错误”请大虾指教,小弟很急
回复
作者: 花卷, 发布日期: 2012-05-20 17:58:27
我也是用的4.1 怎么做也没有效果
回复
发表新帖 发表回复