上传图片并给图片加水印(公共类积累)

来源:互联网 发布:淘宝卖家如何玩转微淘 编辑:程序博客网 时间:2024/05/21 17:00
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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(1, 99);        //新文件名称        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, 0, 0, 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), 0, 0, 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);    }}

原创粉丝点击