惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
Cisco Talos Blog
Cisco Talos Blog
Y
Y Combinator Blog
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
GbyAI
GbyAI
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
J
Java Code Geeks
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 聂微东
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Privacy & Cybersecurity Law Blog
L
LangChain Blog
L
LINUX DO - 热门话题
Hugging Face - Blog
Hugging Face - Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Privacy International News Feed
F
Full Disclosure
S
Schneier on Security
T
Tenable Blog
量子位
NISL@THU
NISL@THU
Latest news
Latest news
V
Visual Studio Blog
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
博客园_首页
K
Kaspersky official blog
L
Lohrmann on Cybersecurity
美团技术团队
P
Proofpoint News Feed
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
S
Securelist
The Register - Security
The Register - Security
G
GRAHAM CLULEY
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
Engineering at Meta
Engineering at Meta
C
Cisco Blogs

博客园 - 范燕军

UML学习之用例图 jquery分页控件 对象,XML序列化 (转)C#中调用Windows API时的数据类型对应关系 asp.net页生命周期 SVN服务端的配置 [ 转] .NET相关的最好东西--全球最新评价 asp.net执行.sql文件 [转] 用ASP.NET对IIS中的虚拟目录进行操作 [转] 使用JavaScript检测浏览器的相关特性 [转] 路径,文件,目录,I/O常见操作汇总(三) [转] 路径,文件,目录,I/O常见操作汇总(二) [转] 路径,文件,目录,I/O常见操作汇总(一) [转] Javascript访问Cookie的四个常用方法 [转] Javascript访问Cookie的四个常用方法 [转]C#实现MS SQL数据导出到Excel [转]常用的JavaScript验证正则表达式 [转]ajax加载内容示例 [转]14 个经典的javascript代码
[转]NET用户控件文件上传,并给图片文件加水印(增加文字水印文字设置)
范燕军 · 2008-04-01 · via 博客园 - 范燕军

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;


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

    
string _strNewFileFolder = "UpLoadFile/";      //文件上传的目录

    int _NewImgpx = 120;                            //缩略图尺寸
    bool _IsThumb = true;                           //是否启用缩略图 true:启用  false:不启用
    bool _IsWatermark = true;                       //是否启用水印 true:启用  false:不启用
    int _WatemarkPos = 9;                           //水印位置 1:左上角 2:水平居中垂直顶部 3:右上角 4:垂直居中水平靠左 5:居中 6:垂直居中水平靠右 7:左下角 8:水平居中垂直底部 9:右下角
    string _WatemarkType = "txt";                   //水印类型 txt:文字水印 img:图片水印
    string _WatemarkText = "fanyanjun.cnblogs.com";            //水印文字
    string _WatemarkFont = "Verdana";               //水印字体
    string _WatemarkTextColor = "#FFFFFF";          //水印文字颜色
    int _WatemarkFontSize = 18;                     //水印文字像素
    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 NewFileFolder
    
{
        
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 WatemarkTextColor
    
{
        
set { _WatemarkTextColor = value; }

    }

    
/// <summary>
    
/// 设置水印图片
    
/// </summary>

    public string WatemarkImg
    
{
        
set { _WatemarkImg = value; }

    }

    
/// <summary>
    
/// 设置上传文件的限制大小
    
/// </summary>

    public int FileSizeMax
    
{
        
set { _FileSizeMax = value; }

    }


    
/// <summary>
    
/// 上传文件原文件名
    
/// </summary>

    public string OldFileName
    
{
        
get return _srcFileName; }

    }


    
/// <summary>
    
/// 扩展名
    
/// </summary>

    public string OldFileExtension
    
{
        
get return _srcFileExtension; }

    }


    
/// <summary>
    
/// 新文件名
    
/// </summary>

    public string FileName
    
{
        
get return _strFileName; }

    }


    
/// <summary>
    
/// 文件类型
    
/// </summary>

    public string FileType
    
{
        
get return _strFileType; }

    }

    
/// <summary>
    
/// 文件大小 单位 KB
    
/// </summary>

    public int FileSize
    
{
        
get return _strFileSize; }

    }


    
/// <summary>
    
/// 原图宽度
    
/// </summary>

    public int OldFileWidth
    
{
        
get return _OldFileWidth; }

    }


    
/// <summary>
    
/// 原图高度
    
/// </summary>

    public int OldFileHeight
    
{
        
get return _OldFileHeight; }

    }


    
/// <summary>
    
/// 缩略图高度
    
/// </summary>

    public int ThumbImageHeight
    
{
        
get return _NewImgHeight; }

    }


    
/// <summary>
    
/// 缩略图宽度
    
/// </summary>

    public int ThumbImageWidth
    
{
        
get return _NewImgWidth; }

    }


    
/// <summary>
    
/// 缩略图完整地址
    
/// </summary>

    public string ThumbImagePath
    
{
        
get return _thumbImgPath; }

    }


    
/// <summary>
    
/// 返回上传图片完整地址
    
/// </summary>

    public string FilePath
    
{
        
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, System.Drawing.GraphicsUnit.Pixel);


                        
//判断图片的大小,如果图片过小,不写文字

                        if (image.Width < 200)
                            
//在此设定在图片上所加的文字

                            _WatemarkText = "";

                        
//写的文字的起始位置,x,y坐标

                        _WatemarkPosX = 5;
                        _WatemarkPosY 
= 5
;
                        
//设置字体的颜色

                        System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.ColorTranslator.FromHtml(_WatemarkTextColor));

                        System.Drawing.StringFormat fm 
= new
 System.Drawing.StringFormat();

                        
//水印放置左上角

                        if (_WatemarkPos == 1)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Near;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Near;
                        }


                        
//水平居中垂直顶部
                        if (_WatemarkPos == 2)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Center;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Near;
                        }


                        
//右上角
                        if (_WatemarkPos == 3)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Far;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Near;

                        }


                        
//垂直居中水平靠左
                        if (_WatemarkPos == 4)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Near;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Center;
                        }


                        
//居中
                        if (_WatemarkPos == 5)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Center;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Center;
                        }


                        
//垂直居中水平靠右
                        if (_WatemarkPos == 6)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Far;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Center;
                        }


                        
//左下角
                        if (_WatemarkPos == 7)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Near;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Far;
                        }


                        
//水平居中垂直底部
                        if (_WatemarkPos == 8)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Center;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Far;
                        }


                        
//水印放置右下角
                        if (_WatemarkPos == 9)
                        
{
                            fm.Alignment 
=
 System.Drawing.StringAlignment.Far;
                            fm.LineAlignment 
=
 System.Drawing.StringAlignment.Far;
                        }



                        
//写字
                        g.DrawString(_WatemarkText, f, b, new System.Drawing.RectangleF(00, image.Width, image.Height), fm);

                        
//释放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);
                ōldFileHeight 
=
 img.Height;
                ōldFileWidth 
=
 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);