上传附件加水印

/// <summary>
        /// 会产生graphics异常的PixelFormat
        /// </summary>
        private static PixelFormat[] indexedPixelFormats = { PixelFormat.Undefined, PixelFormat.DontCare,
PixelFormat.Format16bppArgb1555, PixelFormat.Format1bppIndexed, PixelFormat.Format4bppIndexed,
PixelFormat.Format8bppIndexed
    };
public string Upload()
        {
            Response.ContentType = "text/plain";
            string str1 = Request.Form["str1"];
            string str2 = Request.Form["str2"];
            string filetype = Request.Form["filetype"];

            var obj = RoadFlow.Cache.IO.Opation.Get(str1 ?? "");
            if (str1.IsNullOrEmpty() || str2.IsNullOrEmpty() || obj == null || obj.ToString() != str2)
            {
                return "您不能上传文件";
            }

            //接收上传后的文件
            HttpPostedFileBase file = Request.Files["Filedata"];

            if (filetype.IsNullOrEmpty())
            {
                if (!RoadFlow.Utility.Config.UploadFileType.Contains(Path.GetExtension(file.FileName).TrimStart(‘.‘), StringComparison.CurrentCultureIgnoreCase))
                {
                    return "您上传的文件类型不被允许";
                }
            }
            else
            {

                if (!filetype.Contains(Path.GetExtension(file.FileName).TrimStart(‘.‘), StringComparison.CurrentCultureIgnoreCase))
                {
                    return "您上传的文件类型不被允许";
                }
            }
            var reg = new Regex(@"^/w+$");
            var fname = file.FileName.Split(‘.‘)[0];
            if (!reg.IsMatch(fname) && !new Regex(@"^[a-zA-Z0-9_\u4e00-\u9fa5]+$").IsMatch(fname) && !new Regex(@"^[u4e00-u9fa5]+$").IsMatch(fname))
                return "上传的文件名只能由数字字母汉字或者下划线组成";

            //获取文件的保存路径
            string uploadPath;
            string uploadFullPath = Server.MapPath(getFilePath(out uploadPath));

            //判断上传的文件是否为空
            if (file != null)
            {
                if (!Directory.Exists(uploadFullPath))
                {
                    Directory.CreateDirectory(uploadFullPath);
                }

                //保存文件
                string newFileName = getFileName(uploadFullPath, file.FileName);
                string newFileFullPath = uploadFullPath + newFileName;
                try
                {
                    int fileLength = file.ContentLength;
                    //添加水印
                    var str = "jpg,png,gif,bmp";
                    if (str.Contains(Path.GetExtension(file.FileName).TrimStart(‘.‘)))
                    {

                        System.Drawing.Image image = System.Drawing.Image.FromStream(file.InputStream);
                        System.Drawing.Graphics g;
                        System.Drawing.Font f = new System.Drawing.Font("宋体", 15, System.Drawing.FontStyle.Bold);

                        if (IsPixelFormatIndexed(image.PixelFormat))
                        {
                            Bitmap bmp = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb);
                            using (g = Graphics.FromImage(bmp))
                            {
                                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                                g.SmoothingMode = SmoothingMode.AntiAlias;
                                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                                g.DrawImage(image, 0, 0, image.Width, image.Height);
                                System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
                                PointF pointF = new PointF(image.Width - (RoadFlow.Platform.Users.CurrentUserName.Length * f.Size + 30), image.Height - 30);
                                SizeF sizeF = g.MeasureString(RoadFlow.Platform.Users.CurrentUserName, f);
                                g.FillRectangle(Brushes.Gray, new RectangleF(pointF, sizeF));
                                g.DrawString(RoadFlow.Platform.Users.CurrentUserName, f, Brushes.Red, pointF);
                                g.DrawString(RoadFlow.Platform.Users.CurrentUserName, f, b, image.Width - (RoadFlow.Platform.Users.CurrentUserName.Length * f.Size + 30), image.Height - 30);

                            }
                            bmp.Save(uploadFullPath + "ShuiYin_" + newFileName);
                            bmp.Dispose();
                        }
                        else
                        {
                            //g = Graphics.FromImage(image);
                            g = System.Drawing.Graphics.FromImage(image);
                            g.DrawImage(image, 0, 0, image.Width, image.Height);

                            System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
                            PointF pointF = new PointF(image.Width - (RoadFlow.Platform.Users.CurrentUserName.Length * f.Size + 30), image.Height - 30);
                            SizeF sizeF = g.MeasureString(RoadFlow.Platform.Users.CurrentUserName, f);
                            g.FillRectangle(Brushes.Gray, new RectangleF(pointF, sizeF));
                            g.DrawString(RoadFlow.Platform.Users.CurrentUserName, f, Brushes.Red, pointF);
                            g.DrawString(RoadFlow.Platform.Users.CurrentUserName, f, b, image.Width - (RoadFlow.Platform.Users.CurrentUserName.Length * f.Size + 30), image.Height - 30);
                            g.Dispose();
                            image.Save(uploadFullPath + "ShuiYin_" + newFileName);
                            image.Dispose();
                        }

                        //保存原图
                        file.SaveAs(newFileFullPath);
                        return "1|" + (uploadPath + "ShuiYin_" + newFileName) + "|" + (fileLength / 1000).ToString("###,###") + "|" + "ShuiYin_" + newFileName;
                    }
                    else
                    {

                        file.SaveAs(newFileFullPath);
                        return "1|" + (uploadPath + newFileName) + "|" + (fileLength / 1000).ToString("###,###") + "|" + newFileName;
                    }

                    file.SaveAs(newFileFullPath);
                    return "1|" + (uploadPath + newFileName) + "|" + (fileLength / 1000).ToString("###,###") + "|" + newFileName;
                }
                catch
                {
                    return "上传文件发生了错误";
                }
            }
            else
            {
                return "上传文件为空";
            }
        }

        /// <summary>
        /// 得到上传文件名
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private string getFileName(string filePath, string fileName)
        {
            while (System.IO.File.Exists(filePath + fileName))
            {
                fileName = Path.GetFileNameWithoutExtension(fileName) + "_" + RoadFlow.Utility.Tools.GetRandomString() + Path.GetExtension(fileName);
            }
            return fileName;
        }

        /// <summary>
        /// 得到文件保存路径
        /// </summary>
        /// <returns></returns>
        private string getFilePath(out string path1)
        {
            DateTime date = RoadFlow.Utility.DateTimeNew.Now;
            path1 = Url.Content("~/Content/UploadFiles/" + date.ToString("yyyyMM") + "/" + date.ToString("dd") + "/");
            return path1;
        }

        private static bool IsPixelFormatIndexed(PixelFormat imgPixelFormat)
        {
            foreach (PixelFormat pf in indexedPixelFormats)
            {
                if (pf.Equals(imgPixelFormat)) return true;
            }

            return false;
        }

说明:

1.有时候上传会出现无法添加水印的情况,需要,图片下载下来生成bmp格式的图片才可以添加。

时间: 2024-10-02 20:55:44

上传附件加水印的相关文章

ASP.NET图片上传,加水印文字和水印图片!

看了清清月儿的这篇文章让自己受益匪浅,但是觉得还有一些问题.上传图片后还有原来的图片文件存在,觉得这样很不爽,调用file类的delete方法删除原来没有生成水印的图片另外自己又加了一个限制图片大小的函数 1.最简单的单文件上传(没花头) 效果图:说明:这是最基本的文件上传,在asp.net1.x中没有这个FileUpload控件,只有html的上传控件,那时候要把html控件转化为服务器控件,很不好用.其实所有文件上传的美丽效果都是从这个FileUpload控件衍生,第一个例子虽然简单却是根本

文件上传,图片加水印

文件上传: 所用控件:FileUpload 使用时的思路: 1.判断用户是否选中了文件 FileUpload.FileName获取选中的文件名,判断长度,如果长度大于零就代表已经选择了文件 JS端:通过ID获取控件,然后控件的value获取选中的文件名 2.将文件保存到服务器上 FileUpload.SaveAs("绝对路径"); 3.获得绝对路径 先编写相对路径:比如"UpLoads/abc.txt" 再把路径映射成绝对路径:Server.MapPath(&quo

图片上传,图片加水印,验证码制作

文件上传: 所用控件:FileUpload 使用时的思路: 1.判断用户是否选中了文件 FileUpload.FileName获取选中的文件名,判断长度,如果长度大于零就代表已经选择了文件 JS端:通过ID获取控件,然后控件的value获取选中的文件名 2.将文件保存到服务器上 FileUpload.SaveAs("绝对路径"); 3.获得绝对路径 先编写相对路径:比如"UpLoads/abc.txt" 再把路径映射成绝对路径:Server.MapPath(&quo

[原创]超强C#图片上传,加水印,自动生成缩略图源代码

<%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ Import Namespace=“System.IO“ %> <%@ Import Namespace=“System.Net“ %> <%@ Import NameSpace=“System.Web“ %> <%@ Import NameSpace=“Legalsof

DTCMS中部分IE8不支持webupload上传附件的控件,更改为ajaxfileupload

dialog\dialog_attach.aspx <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width,minimum-scale=1.0

spring MVC上传附件

spring mvc为我们封装了十分简单的上传附件的方法,以下通过一个例子学习. 1.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%

bugfree 中不能上传附件

前些日子领导让搭建一个bug管理系统,因为我没用过,所以问了下测试,看他们对那个比较熟悉,然后就搭建了bugfree.但是在使用了一段时间之后测试人员发现不能上传附件了, 首先排除了mysql的问题, 那就是php的问题 按照网上的解释,php上传也是限制大小的 修改/etc/php.ini 按照上面的修改后发现还是不能上传,那么问题出在哪儿了呢 3.  可能是apache服务器根本没有读到php.ini配置文件,那么怎么知道apache服务到底读的是php的那个配置文件呢,于是乎在apache

测试上传附件

测试上传附件 http://images2015.cnblogs.com/blog/332907/201608/332907-20160828221233845-1455710267.jpg

上传附件使用jquery-form.js的ajaxsubmit提交一点记录

最近项目用到了附件附件上传功能,因为上传附件想尽量控制在一个控件上传附件并回显在下方的列表中,选择附件则触发上传. 刚开始使用了swfupload.js的flash控件进行上传,但是在IE中如果没有相应控件就无法draw出上传控件,应该是浏览器段没有flash控件造成的. 最后还是改回html的type="file"来实现上传,因为附件上传成功后需要回调函数并在下方列表中回显:所以纯粹的使用form表单提交无法回调需要的数据.而直接使用js取得input内容组装为file对象使用aja