zoukankan      html  css  js  c++  java
  • 转:上传图片并给图片加水印(公共类积累)

    代码
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.IO;
    /// <summary>
    /// 上传图片加水印
    /// 作者:
    /// 时间:2006-12-8
    /// E-mail:jiay_yong@163.com
    /// 说明:文字水印的位置有待完善,建议用图片水印
    /// </summary>

    public partial class UpFile : System.Web.UI.UserControl
    {

        
    string _strNewFileFolder = "UpLoad/";           //文件上传的目录
        int _NewImgpx = 300;                            //缩略图尺寸
        bool _IsThumb = true;                           //是否启用缩略图 true:启用  false:不启用
        bool _IsWatermark = true;                       //是否启用水印 true:启用  false:不启用
        int _WatemarkPos = 9;                           //水印位置 1:左上角 2:水平居中垂直顶部 3:右上角 4:垂直居中水平靠左 5:居中 6:垂直居中水平靠右 7:左下角 8:水平居中垂直底部 9:右下角
        string _WatemarkType = "img";                   //水印类型 txt:文字水印 img:图片水印
        string _WatemarkText = "PayOpen薪酬公开分析网"//水印文字
        string _WatemarkFont = "Verdana";               //水印字体
        int _WatemarkFontSize = 12;                     //水印字号
        string _WatemarkImg = "mark.png";               //水印图片
        int _FileSizeMax = 2048;                        //限制上传文件大小

        
    string _srcFileName;                            //上传文件原文件名
        string _srcFileExtension;                       //扩展名
        string _strFileName;                            //新文件名
        string _strFileType;                            //文件类型
        int _strFileSize;                               //文件大小 单位 KB
        int _OldFileWidth;                              //原图宽度
        int _OldFileHeight;                             //原图高度
        int _NewImgHeight;                              //缩略图高度
        int _NewImgWidth;                               //缩略图宽度
        string _thumbImgPath;                           //缩略图完整地址
        string _imagePath;                              //返回上传图片完整地址
        string _errMsg;                                 //返回出错提示

        
    string _strFileFolder;
        
    int _WatemarkPosX = 5;
        
    int _WatemarkPosY = 5;

        DateTime now 
    = DateTime.Now;                    //取当前的时间到DateTime类的对象now中

        
    public delegate void OnUploadEvent(object sender, EventArgs e);
        
    public event OnUploadEvent OnUpload;

        
    /// <summary>
        
    /// 设置文件上传的目录
        
    /// </summary>
        public string strNewFileFolder
        {
            
    set { _strNewFileFolder = value; }
        }

        
    /// <summary>
        
    /// 设置缩略图的尺寸
        
    /// </summary>
        public int NewImgpx
        {
            
    set { _NewImgpx = value; }
        }

        
    /// <summary>
        
    /// 是否启用缩略图
        
    /// </summary>
        
    /// 
        public bool IsThumb
        {
            
    set { _IsThumb = value; }
        }

        
    /// <summary>
        
    /// 是否启用水印
        
    /// </summary>
        public bool IsWatermark
        {
            
    set { _IsWatermark = value; }
        }
        
        
    /// <summary>
        
    /// 设置水印位置
        
    /// </summary>
        public int WatemarkPos
        {
            
    set { _WatemarkPos = value; }
        }
        
        
    /// <summary>
        
    /// 设置水印类型 txt:文字水印 img:图片水印
        
    /// </summary>
        public string WatemarkType
        {
            
    set { _WatemarkType = value; }
        }

        
    /// <summary>
        
    /// 设置水印文字
        
    /// </summary>
        public string WatemarkText
        {
            
    set { _WatemarkText = value; }
        }

        
    /// <summary>
        
    /// 设置水印字体
        
    /// </summary>
        public string WatemarkFont
        {
            
    set { _WatemarkFont = value; }
        }

        
    /// <summary>
        
    /// 设置水印字号
        
    /// </summary>
        public int WatemarkFontSize
        {
            
    set { _WatemarkFontSize = value; }
        }

        
    /// <summary>
        
    /// 设置水印图片
        
    /// </summary>
        public string WatemarkImg
        {
            
    set { _WatemarkImg = value; }
        }
        
    /// <summary>
        
    /// 设置上传文件的限制大小
        
    /// </summary>
        public int FileSizeMax
        {
            
    set { _FileSizeMax = value; }
        }

        
    /// <summary>
        
    /// 上传文件原文件名
        
    /// </summary>
        public string srcFileName
        {
            
    get { return _srcFileName; }
        }

        
    /// <summary>
        
    /// 扩展名
        
    /// </summary>
        public string srcFileExtension
        {
            
    get { return _srcFileExtension; }
        }

        
    /// <summary>
        
    /// 新文件名
        
    /// </summary>
        public string strFileName
        {
            
    get { return _strFileName; }
        }

        
    /// <summary>
        
    /// 文件类型
        
    /// </summary>
        public string strFileType
        {
            
    get { return _strFileType; }
        }
        
    /// <summary>
        
    /// 文件大小 单位 KB
        
    /// </summary>
        public int strFileSize
        {
            
    get { return _strFileSize; }
        }

        
    /// <summary>
        
    /// 原图宽度
        
    /// </summary>
        public int OldFileWidth
        {
            
    get { return _OldFileWidth; }
        }

        
    /// <summary>
        
    /// 原图高度
        
    /// </summary>
        public int OldFileHeight
        {
            
    get { return _OldFileHeight; }
        }

        
    /// <summary>
        
    /// 缩略图高度
        
    /// </summary>
        public int NewImgHeight
        {
            
    get { return _NewImgHeight; }
        }

        
    /// <summary>
        
    /// 缩略图宽度
        
    /// </summary>
        public int NewImgWidth
        {
            
    get { return _NewImgWidth; }
        }

        
    /// <summary>
        
    /// 缩略图完整地址
        
    /// </summary>
        public string thumbImgPath
        {
            
    get { return _thumbImgPath; }
        }

        
    /// <summary>
        
    /// 返回上传图片完整地址
        
    /// </summary>
        public string ImagePath
        {
            
    get { return _imagePath; }
        }

        
    /// <summary>
        
    /// 返回出错提示
        
    /// </summary>
        public string ErrMsg
        {
            
    get { return _errMsg; }
        }

        
    protected void Page_Load(object sender, EventArgs e)
        {
            _WatemarkImg 
    = Server.MapPath("./"+ _WatemarkImg; //水印图片

            
    //文件上传的目录
            _strNewFileFolder += now.Year.ToString() + "/";
            _strFileFolder 
    = Server.MapPath("./"+ _strNewFileFolder;
        }

        
    protected void Button1_ServerClick(object sender, EventArgs e)
        {
            
    //随机数
            Random Rnd = new Random();
            
    int strRnd = Rnd.Next(199);

            
    //新文件名称
            string strFileName = now.Month.ToString() + now.Day.ToString() + now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString() + strRnd.ToString();

            
    if (UpLoadFile.PostedFile.ContentLength != 0)  //判断选取对话框的文件长度是否为0
            {

                
    //检测目录是否存在,不存在就建立目录
                if (!Directory.Exists(_strFileFolder))
                {
                    Directory.CreateDirectory(_strFileFolder);
                }

                
    //获取原文件信息
                string srcFile = UpLoadFile.PostedFile.FileName;
                
    string srcFileName = Path.GetFileName(srcFile.ToString());          //原文件名
                string srcFileExtension = Path.GetExtension(srcFile.ToString());    //原文件扩展名           
                string strFileType = UpLoadFile.PostedFile.ContentType;             //获得文件类型
                int strFileSize = UpLoadFile.PostedFile.ContentLength / _FileSizeMax;       //获得文件体积大小,单位KB


                
    //限制文件上传大小
                if (strFileSize > _FileSizeMax)
                {
                    _errMsg 
    = "上传文件超过限制,文件大小限制为:" + _FileSizeMax + " KB";
                    
    return;
                }

                strFileName 
    = strFileName + srcFileExtension;                       //新文件名包括扩展名
                _imagePath = _strNewFileFolder + strFileName;                       //返回上传后的图片路径

                
    //输出
                _srcFileName = srcFileName;                 //上传文件原文件名
                _srcFileExtension = srcFileExtension;       //扩展名
                _strFileName = strFileName;                 //新文件名
                _strFileType = strFileType;                 //文件类型
                _strFileSize = strFileSize;                 //文件大小 单位 KB

                
    //判断是否为图片
                bool IsImg = true;
                
    if (UpLoadFile.PostedFile.ContentType.IndexOf("image"< 0)
                {
                    IsImg 
    = false;
                }

                
    if (IsImg == false)
                {
                    UpLoadFile.PostedFile.SaveAs(_strFileFolder 
    + strFileName);          //非图片文件上传
                }
                
    else
                {
                    
    //加水印并上传
                    if (_IsWatermark == true)
                    {

                        System.Drawing.Image image;
                        
    if (strFileType == "image/bmp"//bmp图片格式
                            image = System.Drawing.Bitmap.FromStream(UpLoadFile.PostedFile.InputStream);
                        
    else
                            image 
    = System.Drawing.Image.FromStream(UpLoadFile.PostedFile.InputStream);

                        System.Drawing.Graphics g 
    = System.Drawing.Graphics.FromImage(image);

                        
    if (_WatemarkType == "txt"//文字水印
                        {

                            
    //将图片绘制到graphics中
                            g.DrawImage(image, 00, image.Width, image.Height);
                            
    //设置文字的属性
                            System.Drawing.Font f = new System.Drawing.Font(_WatemarkFont, _WatemarkFontSize);
                            
    //判断图片的大小,如果图片过小,不写文字
                            if (image.Width < 200)
                                
    //在此设定在图片上所加的文字
                                _WatemarkText = "";

                            
    //写的文字的起始位置,x,y坐标
                            _WatemarkPosX = 5;
                            _WatemarkPosY 
    = 5;
                            
    //设置字体的颜色
                            System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.White);
                            
    //写字
                            g.DrawString(_WatemarkText, f, b, _WatemarkPosX, _WatemarkPosY);
                            
    //释放graphics
                            g.Dispose();

                            
    //保存加上水印的图片
                            image.Save(_strFileFolder + strFileName);
                            
    //释放image
                            image.Dispose();

                        }
                        
    else if (_WatemarkType == "img"//图片水印
                        {

                            System.Drawing.Image copyImage 
    = System.Drawing.Image.FromFile(_WatemarkImg);

                            
    //水印放置左上角
                            if (_WatemarkPos == 1)
                            {
                                _WatemarkPosX 
    = 5;
                                _WatemarkPosY 
    = 5;
                            }

                            
    //水平居中垂直顶部
                            if (_WatemarkPos == 2)
                            {
                                _WatemarkPosX 
    = (image.Width - copyImage.Width) / 2;
                                _WatemarkPosY 
    = 5;
                            }

                            
    //右上角
                            if (_WatemarkPos == 3)
                            {
                                _WatemarkPosX 
    = image.Width - copyImage.Width - 5;
                                _WatemarkPosY 
    = 5;
                            }

                            
    //垂直居中水平靠左
                            if (_WatemarkPos == 4)
                            {
                                _WatemarkPosX 
    =  5;
                                _WatemarkPosY 
    = (image.Height - copyImage.Height) / 2;
                            }

                            
    //居中
                            if (_WatemarkPos == 5)
                            {
                                _WatemarkPosX 
    = (image.Width - copyImage.Width) / 2;
                                _WatemarkPosY 
    = (image.Height - copyImage.Height) / 2;
                            }

                            
    //垂直居中水平靠右
                            if (_WatemarkPos == 6)
                            {
                                _WatemarkPosX 
    = image.Width - copyImage.Width - 5;
                                _WatemarkPosY 
    = (image.Height - copyImage.Height) / 2;
                            }

                            
    //左下角
                            if (_WatemarkPos == 7)
                            {
                                _WatemarkPosX 
    = 5;
                                _WatemarkPosY 
    = image.Height - copyImage.Height - 5;
                            }

                            
    //水平居中垂直底部
                            if (_WatemarkPos == 8)
                            {
                                _WatemarkPosX 
    = (image.Width - copyImage.Width) / 2;
                                _WatemarkPosY 
    = image.Height - copyImage.Height - 5;
                            }

                            
    //水印放置右上角
                            if (_WatemarkPos == 9)
                            {
                                _WatemarkPosX 
    = image.Width - copyImage.Width - 5;
                                _WatemarkPosY 
    = image.Height - copyImage.Height - 5;
                            }

                            
    if (copyImage.Height < image.Height && copyImage.Width < image.Width)
                            {
                                
    //将水印打印到上传图片上去
                                g.DrawImage(copyImage, new System.Drawing.Rectangle(_WatemarkPosX, _WatemarkPosY, copyImage.Width, copyImage.Height), 00, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
                                
    //释放graphics
                                g.Dispose();
                            }
                            
    //保存图片
                            image.Save(_strFileFolder + strFileName);
                            
    //释放image
                            image.Dispose();
                        }

                    }
                    
    else
                    {
                        UpLoadFile.PostedFile.SaveAs(_strFileFolder 
    + strFileName);          //不加水印上传
                    }

                    
    //获得图片尺寸
                    int OldFileHeight, OldFileWidth;
                    System.Drawing.Image img 
    = System.Drawing.Image.FromStream(UpLoadFile.PostedFile.InputStream);
                    oldFileHeight 
    = img.Height;
                    oldFileWidth 
    = img.Width;

                    
    //创建缩略图
                    if (_IsThumb == true)
                    {
                        
    int NewImgHeight, NewImgWidth;

                        
    if (OldFileWidth > OldFileHeight)
                        {
                            NewImgWidth 
    = _NewImgpx;
                            NewImgHeight 
    = (int)(OldFileHeight / (float)OldFileWidth * _NewImgpx);
                        }
                        
    else
                        {
                            NewImgHeight 
    = _NewImgpx;
                            NewImgWidth 
    = (int)(OldFileWidth / (float)OldFileHeight * _NewImgpx);
                        }
                        
    //如果缩略图的尺寸大于原图尺寸,则用原图片大小
                        if (NewImgHeight >= OldFileHeight && NewImgWidth >= OldFileWidth)
                        {
                            NewImgHeight 
    = OldFileHeight;
                            NewImgWidth 
    = OldFileWidth;
                        }
                        System.Drawing.Image NewImg 
    = img.GetThumbnailImage(NewImgWidth, NewImgHeight, null, System.IntPtr.Zero);
                        NewImg.Save(_strFileFolder 
    + "Thumb_" + strFileName, System.Drawing.Imaging.ImageFormat.Jpeg);

                        
    //返回数据
                        _NewImgHeight = NewImgHeight;                 //缩略图高度
                        _NewImgWidth = NewImgWidth;                  //缩略图宽度
                        _thumbImgPath = _strNewFileFolder + "Thumb_" + strFileName;  //缩略图地址
                    }
                    
    //返回数据
                    _OldFileWidth = OldFileWidth;    //原图宽度
                    _OldFileHeight = OldFileHeight;  //原图高度

                }
            }

            
    this.OnUpload(this, e);

        }
    }


  • 相关阅读:
    使用 VS Code 开发和调试 Burp Suite 扩展
    后渗透神器 Empire 基础用法
    5种语言的按钮事件 断点
    X64下MmIsAddressValid的逆向及内存寻址解析
    x64 内存共享区 KUSER_SHARED_DATA
    内存映射+远线程 调用游戏CALL
    C语言运算符总结
    x32 x64的不同传参方式
    内存占用的一些小问题
    x64分页机制 9
  • 原文地址:https://www.cnblogs.com/e8sp/p/1740880.html
Copyright © 2011-2022 走看看