kindeditor编辑器图片水印

//upload_pic.ashx源码

<%@ webhandler Language="C#" class="edit_html_upload_pic" %>
using System;
using System.Collections;
using System.Web;
using System.IO;
using System.Globalization;
using LitJson;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;
public class edit_html_upload_pic : IHttpHandler, IRequiresSessionState
{
    private HttpContext context;

    public void ProcessRequest(HttpContext context)
    {
        String aspxUrl = context.Request.Path.Substring(0, context.Request.Path.LastIndexOf("/") + 1);

        //每个用户文件夹独立IRequiresSessionState
        String sessionUploadPath = String.Empty;
        if (HttpContext.Current.Session["edit_upload_folder"] != null)
        {
            sessionUploadPath = HttpContext.Current.Session["edit_upload_folder"].ToString() + "/";
        }

        //文件保存目录路径
        String savePath = "../../" + getConfigAppSettings("uploadFolder") + "/" + sessionUploadPath;
        //文件保存目录URL
        String saveUrl = aspxUrl + "../../" + getConfigAppSettings("uploadFolder") + "/" + sessionUploadPath;

        //定义允许上传的文件扩展名
        Hashtable extTable = new Hashtable();
        extTable.Add("image", "gif,jpg,jpeg,png,bmp");
        extTable.Add("flash", "swf,flv");
        extTable.Add("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
        extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");

        //最大文件大小
        int maxSize = 2000000;//2m
        this.context = context;

        HttpPostedFile imgFile = context.Request.Files["imgFile"];
        if (imgFile == null)
        {
            showError("请选择文件。");
        }

        String dirPath = context.Server.MapPath(savePath);
        if (!Directory.Exists(dirPath))
        {
            Directory.CreateDirectory(dirPath);
        }

        String dirName = context.Request.QueryString["dir"] != null ? context.Request.QueryString["dir"] : "image";
        String fileName = imgFile.FileName;
        String fileExt = Path.GetExtension(fileName).ToLower();

        if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(‘,‘), fileExt.Substring(1).ToLower()) == -1)
        {
            showError("上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。");
        }
        if (dirName == "image")
        {
            if (imgFile.InputStream == null || imgFile.InputStream.Length > maxSize)
            {
                showError("上传文件大小超过限制。");
            }
            if (!isPic(imgFile))
            {
                showError("上传文件不合法!");
            }
        }

        //创建文件夹
        //dirPath += dirName + "/";
        //saveUrl += dirName + "/";
        if (!Directory.Exists(dirPath))
        {
            Directory.CreateDirectory(dirPath);
        }
        String ymd = DateTime.Now.ToString("yyyyMM", DateTimeFormatInfo.InvariantInfo);
        dirPath += ymd + "/";
        saveUrl += ymd + "/";
        if (!Directory.Exists(dirPath))
        {
            Directory.CreateDirectory(dirPath);
        }

        //edit_upload_fileName
        //string sessionUploadFileName = string.Empty;
        //if (HttpContext.Current.Session["edit_upload_fileName"] != null)
        //{
        //    sessionUploadFileName = HttpContext.Current.Session["edit_upload_fileName"].ToString();
        //}
        //String newFileName = sessionUploadFileName + DateTime.Now.ToString("yyyyMMddHHmmssffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
        //String filePath = dirPath + newFileName;
        //imgFile.SaveAs(filePath);
        //String fileUrl = saveUrl + newFileName;

        //水印start
        String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo);
        String filePath = dirPath + newFileName + fileExt;
        imgFile.SaveAs(filePath);
        String fileUrl = saveUrl + newFileName + fileExt;
        //添加文字水印
        Image image = System.Drawing.Image.FromFile(filePath);
        Graphics g = Graphics.FromImage(image);
        g.DrawImage(image, 0, 0, image.Width, image.Height);
        Font f = new Font("Verdana", 14);
        Brush b = new SolidBrush(Color.Red);
        string addText = "www.114390.com";
        g.DrawString(addText, f, b, 10, 10);
        g.Dispose();
        //保存加水印过后的图片,删除原始图片
        string newPath = dirPath + newFileName + "_new" + fileExt;
        image.Save(newPath);
        image.Dispose();
        if (File.Exists(filePath))
        {
            File.Delete(filePath);
        }
        fileUrl = saveUrl + newFileName + "_new" + fileExt;
        //水印end

        Hashtable hash = new Hashtable();
        hash["error"] = 0;
        hash["url"] = fileUrl;
        context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
        context.Response.Write(JsonMapper.ToJson(hash));
        context.Response.End();
    }
    private string getConfigAppSettings(string keyName)
    {
        if (!string.IsNullOrEmpty(keyName))
        {
            return System.Configuration.ConfigurationManager.AppSettings[keyName];
        }
        return "";
    }
    private void showError(string message)
    {
        Hashtable hash = new Hashtable();
        hash["error"] = 1;
        hash["message"] = message;
        context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
        context.Response.Write(JsonMapper.ToJson(hash));
        context.Response.End();
    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }
    public bool isPic(HttpPostedFile imgFile)
    {
        int fileLen=imgFile.ContentLength;
        byte[] imgArray = new byte[fileLen];
        imgFile.InputStream.Read(imgArray, 0, fileLen);
        MemoryStream ms = new MemoryStream(imgArray);
        BinaryReader br = new BinaryReader(ms);
        string fileclass = "";
        byte buffer;
        try
        {
            buffer = br.ReadByte();
            fileclass = buffer.ToString();
            buffer = br.ReadByte();
            fileclass += buffer.ToString();
        }
        catch
        { }
        br.Close();
        ms.Close();
        //
        try
        {
            //读取上传的文件是否是图片对象,异常则删除图片
            System.Drawing.Image uploadedImg = System.Drawing.Image.FromStream(imgFile.InputStream);
            if (uploadedImg.Width < 1 || uploadedImg.Height < 1)
            {
                return false;
            }
            uploadedImg.Dispose();
        }
        catch
        {
            return false;
        }
        //
        FileExtension[] fileEx = { FileExtension.GIF, FileExtension.BMP, FileExtension.JPG, FileExtension.PNG};
        foreach (FileExtension fe in fileEx)
        {
            try
            {
                if (Int32.Parse(fileclass) == (int)fe)
                {
                    if (truePic(System.Text.Encoding.ASCII.GetString(imgArray)))
                    {
                        return true;
                    }
                    return false;
                }
            }
            catch
            { }

        }
        return false;
    }
    //判断上传文件中是否包含关键字
    public bool truePic(string str)
    {
        string sStr = ".getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language=|exec |insert |select |delete |update |truncate |declare |iframe |Response|Request(| Eval|Eval |Eval(|%Eval|script |using";
        string[] ck = sStr.Split(‘|‘);
        string strsql = str;
        for (int i = 0; i < ck.Length; i++)
        {
            if (str.IndexOf(ck[i]) != -1 || str.ToUpper().IndexOf(ck[i].ToUpper()) != -1)
            {
                return false;
            }
        }
        return true;
    }
    //文件类型
    public enum FileExtension
    {
        JPG = 255216,
        GIF = 7173,
        PNG = 13780,
        BMP = 6677,
        SWF = 6787,
        SWF2 = 7087,
        RAR = 8297,
        ZIP = 8075,
        DOC = 208207,
        DOCX = 8075,
        XLS = 208207,
        XLS2 = 198243,
        XLSX = 8075,
        //_7Z = 55122,
        // 255216 jpg;
        // 7173 gif;
        // 6677 bmp,
        // 13780 png;
        // 6787 swf
        // 7790 exe dll,
        // 8297 rar
        // 8075 zip
        // 55122 7z
        // 6063 xml
        // 6033 html
        // 239187 aspx
        // 117115 cs
        // 119105 js
        // 102100 txt
        // 255254 sql
        /*
        DOC = 208207,
        DOCX = 8075,
        XLS = 208207,
        XLSX = 8075,
        JS = 239187,
        TXT = 7067,
        MP3 = 7368,
        WMA = 4838,
        MID = 7784,
        */
    }
}
时间: 2024-10-18 02:35:35

kindeditor编辑器图片水印的相关文章

KindEditor编辑器的使用

1.下载KindEditor编辑器  以KindEditor 4.1.10为例. 2.将下载解压完的KindEditor文件夹放在__ROOT__中. 3.在thinkphp中的Index/index.html中添加以下代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo

Kindeditor编辑器

官网: http://kindeditor.net/demo.php 导入选中的文件夹 通常在 webapp 下,建立 editor 文件夹 当使用kindEditor进行编辑时,编辑后内容,不会自动随表单进行提交 KindEditor 工作原理,隐藏原来 textarea 文本框,生成 iframe,在 iframe 里面进行编辑 使用kindeditor导入 应用 kindeditor,页面提供<textarea>文本框 编辑器初始化参数使用 语法: K.create('#id',{opt

详细介绍如何使用kindEditor编辑器

今天群里的朋友问我能不能写个kindEditor编辑器的使用教程,说是弄了半天没有搞定.由于PHP啦后台正好用了这个编辑器,我有写经验,正好教他的同时写出来分享给大家. kindEditor编辑器是一个由JS写成的在线编辑器,很多网站或CMS等都有用它,口碑不错,目前最新版本是4.1.10. 其实它的用法非常简单,我是在下载了它的安装包后看了一些demo然后就把它放到PHP啦的后台上去了.好了教程正式开始 一.下载 下载最新版本的kindEditor(官方网站kindeditor.net),下载

kindeditor编辑器上传图片

使用的是asp.net MVC 上传图片. 1.下载Kindeditor的对应的包 2.html页面 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>UploadByKindeditor</title> <script

如何自定义kindeditor编辑器的工具栏items即去除不必要的工具栏或者保留部分工具栏

kindeditor编辑器的工具栏主要是指编辑器输入框上方的那些可以操作的菜单,默认情况下编辑器是给予了所有的工具栏.针对不同的用户,不同的项目,不同的环境,可能就需要保留部分工具栏.那么我们应该如何自定义自己想要的工具栏呢?工具栏如何编辑呢?我们分几种情况来加以阐述: 第一种:修改原始文件kindeditor.js对工具栏进行统一调整 kindeditor编辑器包内有一个kindeditor.js或者kindeditor-min.js文件,这个文件主要是包含了编辑器的整个基本配置以及一些基本的

onethink框架 编辑器图片没有上传权限

昨天遇到了一个有点蛋疼的问题,创建了一个用户,但是在添加数据的时候,发现编辑器中的图片上传不能使用老是提示下图的那种提示: 然后自己一直在想,怎么编辑器还要图片上传权限呢,淡淡的忧伤啊.然后自己琢磨了一会,发现自己解决不了.立马到Q群中询问,一问,还真的搞定了.原来是要设置权限,不过这个权限是框架数据中早就有了,我们只需要勾选上就可以了.当然了,我这种情况只适用于直接在框架demo上扩展使用的项目,如果完全是自己编写的,那就要看你们各自的构建是咋样的啦.废话不多说,上图:这下子清净了,搞定,再也

使用lowagie给pdf添加文字和图片水印

package com.xian.util; import java.awt.Color;import java.io.FileOutputStream;import java.io.IOException; import com.lowagie.text.DocumentException;import com.lowagie.text.Element;import com.lowagie.text.Image;import com.lowagie.text.pdf.BaseFont;impo

Thinkphp中文水印和图片水印合体集成插件

今天给大家分享一下中文水印和图片水印合体集成插件,Thinkphp只有单独的加文字或加图片,由于工作的需要需要同里加"文字"和"图片"于是,试着修改了一下,只需要一行代码解决图片和文字水印.首先引入Thinkphp的Image方法即可,而且支持中文水印. 1.前端模板:前端原图片和加过水印的图片显示对比<p class="notice red">原图:</p><img src="Public/images/

MyCnCart图片水印

1. 可以添加图片水印, png和jp格式:2. 可以添加文本水印:3. 可以自己添加文本字体:4. 可以选择水印的透明度:5. 可以设定水印的旋转度:6. 可以设定仅对某一分类添加水印:7. 可以设定仅对某些特定商品添加水印: 该插件为注重自己网站图片版权,防止随意被复制使用的网站必备.