我的番茄炒蛋
生活如此精彩,挑战无处不在!

导航

 

加水印的功能代码如下所示

 

代码
/// <summary>
    
/// 图片修改类,主要是用来保护图片版权的,版权归原作者所有
    
/// </summary>
    public class picmark
    {
        
#region "member fields"
        
private string modifyImagePath = null;
        
private string drawedImagePath = null;
        
private int rightSpace;
        
private int bottoamSpace;
        
private int lucencyPercent = 70;
        
private string outPath = null;
        
#endregion
        
public picmark()
        {
        }
        
#region "propertys"
        
/// <summary>
        
/// 获取或设置要修改的图像路径
        
/// </summary>
        public string ModifyImagePath
        {
            
get { return this.modifyImagePath; }
            
set { this.modifyImagePath = value; }
        }
        
/// <summary>
        
/// 获取或设置在画的图片路径(水印图片)
        
/// </summary>
        public string DrawedImagePath
        {
            
get { return this.drawedImagePath; }
            
set { this.drawedImagePath = value; }
        }
        
/// <summary>
        
/// 获取或设置水印在修改图片中的右边距
        
/// </summary>
        public int RightSpace
        {
            
get { return this.rightSpace; }
            
set { this.rightSpace = value; }
        }
        
//获取或设置水印在修改图片中距底部的高度
        public int BottoamSpace
        {
            
get { return this.bottoamSpace; }
            
set { this.bottoamSpace = value; }
        }
        
/// <summary>
        
/// 获取或设置要绘制水印的透明度,注意是原来图片透明度的百分比
        
/// </summary>
        public int LucencyPercent
        {
            
get { return this.lucencyPercent; }
            
set
            {
                
if (value >= 0 && value <= 100)
                    
this.lucencyPercent = value;
            }
        }
        
/// <summary>
        
/// 获取或设置要输出图像的路径
        
/// </summary>
        public string OutPath
        {
            
get { return this.outPath; }
            
set { this.outPath = value; }
        }
        
#endregion
        
#region "methods"
        
/// <summary>
        
/// 开始绘制水印
        
/// </summary>
        public void DrawImage()
        {
            Image modifyImage 
= null;
            Image drawedImage 
= null;
            Graphics g 
= null;
            
try
            {
                
//建立图形对象
                modifyImage = Image.FromFile(this.ModifyImagePath);
                drawedImage 
= Image.FromFile(this.DrawedImagePath);
                g 
= Graphics.FromImage(modifyImage);
                
//获取要绘制图形坐标
                int x = modifyImage.Width - this.rightSpace;
                
int y = modifyImage.Height - this.BottoamSpace;
                
//设置颜色矩阵
                float[][] matrixItems ={
                                           
new float[] {10000},
                                           
new float[] {01000},
                                           
new float[] {00100},
                                           
new float[] {000, (float)this.LucencyPercent/100f, 0},
                                           
new float[] {00001}};

                ColorMatrix colorMatrix 
= new ColorMatrix(matrixItems);
                ImageAttributes imgAttr 
= new ImageAttributes();
                imgAttr.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                
//绘制阴影图像
                g.DrawImage(
                    drawedImage,
                    
new Rectangle(x, y, drawedImage.Width, drawedImage.Height),
                    
00, drawedImage.Width, drawedImage.Height,
                    GraphicsUnit.Pixel, imgAttr);
                
//保存文件
                string[] allowImageType = { ".jpg"".gif"".png"".bmp"".tiff"".wmf"".ico" };
                FileInfo file 
= new FileInfo(this.ModifyImagePath);
                ImageFormat imageType 
= ImageFormat.Gif;
                
switch (file.Extension.ToLower())
                {
                    
case ".jpg":
                        imageType 
= ImageFormat.Jpeg;
                        
break;
                    
case ".gif":
                        imageType 
= ImageFormat.Gif;
                        
break;
                    
case ".png":
                        imageType 
= ImageFormat.Png;
                        
break;
                    
case ".bmp":
                        imageType 
= ImageFormat.Bmp;
                        
break;
                    
case ".tif":
                        imageType 
= ImageFormat.Tiff;
                        
break;
                    
case ".wmf":
                        imageType 
= ImageFormat.Wmf;
                        
break;
                    
case ".ico":
                        imageType 
= ImageFormat.Icon;
                        
break;
                    
default:
                        
break;
                }
                MemoryStream ms 
= new MemoryStream();
                modifyImage.Save(ms, imageType);
                
byte[] imgData = ms.ToArray();
                modifyImage.Dispose();
                drawedImage.Dispose();
                g.Dispose();
                FileStream fs 
= null;
                
if (this.OutPath == null || this.OutPath == "")
                {
                    File.Delete(
this.ModifyImagePath);
                    fs 
= new FileStream(this.ModifyImagePath, FileMode.Create, FileAccess.Write);
                }
                
else
                {
                    fs 
= new FileStream(this.OutPath, FileMode.Create, FileAccess.Write);
                }
                
if (fs != null)
                {
                    fs.Write(imgData, 
0, imgData.Length);
                    fs.Close();
                }
            }
            
finally
            {
                
try
                {
                    drawedImage.Dispose();
                    modifyImage.Dispose();
                    g.Dispose();
                }
                
catch { ;}
            }
        }
        
#endregion
    }

 前台代码如下所示

 

代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="demo.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title></title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
    
        
<asp:FileUpload ID="FileUpload1" runat="server" />
        
<br />
        
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    
    
</div>
    
</form>
</body>
</html>

 

 cs类的代码如下所示

 

代码
 protected void Button1_Click(object sender, EventArgs e)
        {
            
string extension = Path.GetExtension(this.FileUpload1.FileName).ToUpper();
            
string fileName = Guid.NewGuid().ToString();
            
string savePath = Server.MapPath("../upfile/" + fileName+ extension);
            
if (!Directory.Exists(Path.GetDirectoryName(savePath)))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(savePath));
            }
            
this.FileUpload1.SaveAs(savePath);

          
            
//实例化类 
            picmark wm = new picmark();

            wm.DrawedImagePath 
= Server.MapPath("/upfile/" + "backlogo.gif")  ;
            wm.ModifyImagePath 
= savePath;
            wm.RightSpace 
= 145;
            wm.BottoamSpace 
=17;
            wm.LucencyPercent 
= 50;
            wm.OutPath 
= Server.MapPath("/upfile/" + fileName.Replace("-","").ToUpper() + extension);
            wm.DrawImage();



            
//fileName = "_New_" + fileName;
            
//string sPath = Server.MapPath("../upfile/" + fileName + extension);
            
//this.FileUpload1.SaveAs(sPath);

             
//保存加水印过后的图片,删除原始图片 
            if (File.Exists(savePath))
            {
                File.Delete(savePath);
                
//File.Delete(wm.OutPath);
            }

 

posted on 2010-03-25 14:32  bluesky  阅读(510)  评论(0编辑  收藏  举报