如题

解决方案 »

  1.   

    给图片加上水印效果 
    http://www.cnblogs.com/index/archive/2004/10/20/54498.aspx下面的代码中,加文字水印和加图片水印的代码不能共存
    我是为了方便显示才写在一块的
     private void Btn_Upload_Click(object sender, System.EventArgs e)
            {
                if(UploadFile.PostedFile.FileName.Trim()!="")
                {
                    //上传文件
                    string extension = Path.GetExtension(UploadFile.PostedFile.FileName).ToUpper();
                    string fileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
                    string path = Server.MapPath(".") + "/UploadFile/" + fileName + extension;
                    UploadFile.PostedFile.SaveAs(path);                //加文字水印,注意,这里的代码和以下加图片水印的代码不能共存
                    System.Drawing.Image image = System.Drawing.Image.FromFile(path);
                    Graphics g = Graphics.FromImage(image);
                    g.DrawImage(image, 0, 0, image.Width, image.Height);
                    Font f = new Font("Verdana", 32);
                    Brush b = new SolidBrush(Color.White);
                    string addText = AddText.Value.Trim();
                    g.DrawString(addText, f, b, 10, 10);
                    g.Dispose();                //加图片水印
                    System.Drawing.Image image = System.Drawing.Image.FromFile(path);
                    System.Drawing.Image copyImage = System.Drawing.Image.FromFile( Server.MapPath(".") + "/Alex.gif");
                    Graphics g = Graphics.FromImage(image);
                    g.DrawImage(copyImage, new Rectangle(image.Width-copyImage.Width, image.Height-copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
                    g.Dispose();                //保存加水印过后的图片,删除原始图片
                    string newPath = Server.MapPath(".") + "/UploadFile/" + fileName + "_new" + extension;
                    image.Save(newPath);
                    image.Dispose();
                    if(File.Exists(path))
                    {
                        File.Delete(path);
                    }                Response.Redirect(newPath);
                }
            }
      

  2.   

    再来一个:)
    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Drawing.Drawing2D;namespace Tutorial
    {
        class WaterMark
        {        [STAThread]
            static void Main(string[] args)
            {
                //设置工作目录
                string WorkingDirectory = @"C:Documents and Settingsadministrator.JAZZMINEMy DocumentsProjectsTutorialsWaterMark";            //定义版权声明的字符串信息或文本(看来原作者是老外)
                string Copyright = "Copyright @2002 - AP Photo/David Zalubowski";            //创建一个需要添加水印的图像对象
                Image imgPhoto = Image.FromFile(WorkingDirectory + "\water_photo.jpg");
                int phWidth = imgPhoto.Width;
                int phHeight = imgPhoto.Height;            //创建一个原始图像大小的Bitmap
                Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);            bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);            //把Bitmap装载进Graphics对象 
                Graphics grPhoto = Graphics.FromImage(bmPhoto);            //创建一个包含水印的image对象
                Image imgWater = new Bitmap(WorkingDirectory + "\water.bmp");
                int wmWidth = imgWater.Width;
                int wmHeight = imgWater.Height;            //------------------------------------------------------------
                //第一步 -插入版权信息
                //------------------------------------------------------------            //设置这个要转换Graphics对象的图像质量
                grPhoto.SmoothingMode = SmoothingMode.AntiAlias;            //绘制图像对象到graphics对象(保留原始的宽高)
                grPhoto.DrawImage(
                    imgPhoto,                               // Photo Image object
                    new Rectangle(0, 0, phWidth, phHeight), // 构造矩形
                    0,                                      // 要绘制的源图像的x坐标 
                    0,                                      // 要绘制的源图像的y坐标
                    phWidth,                                // 要绘制的源图像的宽度
                    phHeight,                               // 要绘制的源图像的高度
                    GraphicsUnit.Pixel);                    // 图像所使用的单位            //-------------------------------------------------------
                //为了最大化版权信息的字体,我们通过测试多个字体大小,定一个了一个数组来包含不同的字体大小
                //-------------------------------------------------------
                int[] sizes = new int[]{16,14,12,10,8,6,4};            Font crFont = null;
                SizeF crSize = new SizeF();            //通过循环这个数组,来选用不同的字体大小
                //如果它的大小小于图像的宽度,就选用这个大小的字体
                for (int i=0 ;i<7; i++)
                {
                    //设置字体,这里是用arial,黑体
                    crFont = new Font("arial", sizes[i], FontStyle.Bold);
                    //Measure the Copyright string in this Font
                    crSize = grPhoto.MeasureString(Copyright, crFont);                if((ushort)crSize.Width < (ushort)phWidth)
                        break;
                }            //因为图片的高度可能不尽相同, 所以定义了
                //从图片底部算起预留了5%的空间
                int yPixlesFromBottom = (int)(phHeight *.05);            //现在使用版权信息字符串的高度来确定要绘制的图像的字符串的y坐标
     
                float yPosFromBottom = ((phHeight - yPixlesFromBottom)-(crSize.Height/2));            //计算x坐标
                float xCenterOfImg = (phWidth/2);            //把文本布局设置为居中
                StringFormat StrFormat = new StringFormat();
                StrFormat.Alignment = StringAlignment.Center;            //通过Brush来设置黑色半透明
                SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));            //绘制版权字符串
                grPhoto.DrawString(Copyright,                 //版权字符串文本
                    crFont,                                   //字体
                    semiTransBrush2,                           //Brush
                    new PointF(xCenterOfImg+1,yPosFromBottom+1),  //位置
                    StrFormat);            //设置成白色半透明
                SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));            //第二次绘制版权字符串来创建阴影效果
                //记住移动文本的位置1像素
                grPhoto.DrawString(Copyright,                 //版权文本
                    crFont,                                   //字体
                    semiTransBrush,                           //Brush
                    new PointF(xCenterOfImg,yPosFromBottom),  //位置
                    StrFormat);                               //文本对齐                        //------------------------------------------------------------
                //第二步:插入水印图像
                //------------------------------------------------------------            //通过之前创建的Bitmap创建一个 Bitmap
                Bitmap bmWater = new Bitmap(bmPhoto);
                bmWater.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
                
                Graphics grWater = Graphics.FromImage(bmWater);            //To achieve a transulcent water we will apply (2) color 
                //manipulations by defineing a ImageAttributes object and 
                //seting (2) of its properties.
                ImageAttributes imageAttributes = new ImageAttributes();            //第一步是用水印来替代背景颜色 
                //(Alpha=0, R=0, G=0, B=0)
                //要使用 Colormap 来定义一个RemapTable
                ColorMap colorMap = new ColorMap();            //这个水印的背景定义成100%绿色,并用来替代透明           
                colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
                colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);             ColorMap[] remapTable = {colorMap};            imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);            //第二个颜色是用来控制水印图片的不透明度的 
                //是使用一个5*5的RGBA矩阵来实现的 
                // 设置第4行、第4列的值为0.3来不透明度的级别
                float[][] colorMatrixElements = { 
                                                    new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},       
                                                    new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},        
                                                    new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},        
                                                    new float[] {0.0f,  0.0f,  0.0f,  0.3f, 0.0f},        
                                                    new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}}; 
                ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);            imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default,
                    ColorAdjustType.Bitmap);            //本例的水印放置在右上方
                // 偏移量是10
                            int xPosOfWm = ((phWidth - wmWidth)-10);
                int yPosOfWm = 10;            grWater.DrawImage(imgWater, 
                    new Rectangle(xPosOfWm,yPosOfWm,wmWidth,wmHeight),  //Set the detination Position
                    0,                  // x坐标
                    0,                  // y坐标
                    wmWidth,            // 水印宽度
                    wmHeight,            // 水印高度
                    GraphicsUnit.Pixel, // 单位
                    imageAttributes);   //ImageAttributes对象            //使用新生成的加了水印图片替代原始图片
                imgPhoto = bmWater;
                grPhoto.Dispose();
                grWater.Dispose();            //保存的路径
                imgPhoto.Save(WorkingDirectory + @"\water_final.jpg", ImageFormat.Jpeg);
                imgPhoto.Dispose();
                imgWater.Dispose();        }
        }
    }
    http://blog.csdn.net/patriot074/archive/2008/05/21/2465217.aspx
      

  3.   

      <%@ Page Language="C#" AutoEventWireup="true" CodeFile="upfile.aspx.cs" Inherits="upfile_upfile" %> 
       
      <!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" /> 
       <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传" /><br /> 
       <asp:Label ID="Label1" runat="server"></asp:Label></div> 
       </form> 
      </body> 
      </html> 
       upfile.aspx.cs文件 
      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_upfile : System.Web.UI.Page 
      { 
       protected void Page_Load(object sender, EventArgs e) 
       { } 
       
       protected void Button1_Click(object sender, EventArgs e) 
       { 
       if (FileUpload1.HasFile) 
       { 
       string fileContentType = FileUpload1.PostedFile.ContentType; 
       if (fileContentType == "image/bmp" || fileContentType == "image/gif" || fileContentType == "image/pjpeg") 
       { 
       string name = FileUpload1.PostedFile.FileName; // 客户端文件路径 
       
       FileInfo file = new FileInfo(name); 
       string fileName = file.Name; // 文件名称 
       string fileName_s = "s_" + file.Name; // 缩略图文件名称 
       string fileName_sy = "sy_" + file.Name; // 水印图文件名称(文字) 
       string fileName_syp = "syp_" + file.Name; // 水印图文件名称(图片) 
       string webFilePath = Server.MapPath("file/" + fileName); // 服务器端文件路径 
       string webFilePath_s = Server.MapPath("file/" + fileName_s);  // 服务器端缩略图路径 
       string webFilePath_sy = Server.MapPath("file/" + fileName_sy); // 服务器端带水印图路径(文字) 
       string webFilePath_syp = Server.MapPath("file/" + fileName_syp); // 服务器端带水印图路径(图片) 
       string webFilePath_sypf = Server.MapPath("file/shuiyin.jpg"); // 服务器端水印图路径(图片) 
       
       if (!File.Exists(webFilePath)) 
       { 
       try 
       { 
       FileUpload1.SaveAs(webFilePath); // 使用 SaveAs 方法保存文件 
       AddShuiYinWord(webFilePath, webFilePath_sy); 
       AddShuiYinPic(webFilePath, webFilePath_syp, webFilePath_sypf); 
       MakeThumbnail(webFilePath, webFilePath_s, 130, 130, "Cut"); // 生成缩略图方法 
       Label1.Text = "提示:文件“" + fileName + "”成功上传,并生成“" + fileName_s + "”缩略图,文件类型为:" + FileUpload1.PostedFile.ContentType + ",文件大小为:" + FileUpload1.PostedFile.ContentLength + "B"; 
       } 
       catch (Exception ex) 
       { 
       Label1.Text = "提示:文件上传失败,失败原因:" + ex.Message; 
       } 
       } 
       else 
       { 
       Label1.Text = "提示:文件已经存在,请重命名后上传"; 
       } 
       } 
       else 
       { 
       Label1.Text = "提示:文件类型不符"; 
       } 
       } 
       } 
    /**//// <summary> 
       /// 生成缩略图 
       /// </summary> 
       /// <param name="originalImagePath">源图路径(物理路径)</param> 
       /// <param name="thumbnailPath">缩略图路径(物理路径)</param> 
       /// <param name="width">缩略图宽度</param> 
       /// <param name="height">缩略图高度</param> 
       /// <param name="mode">生成缩略图的方式</param> 
       public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode) 
       { 
       System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath); 
       
       int towidth = width; 
       int toheight = height; 
       
       int x = 0; 
       int y = 0; 
       int ow = originalImage.Width; 
       int oh = originalImage.Height; 
       
       switch (mode) 
       { 
       case "HW"://指定高宽缩放(可能变形) 
       break; 
       case "W"://指定宽,高按比例 
       toheight = originalImage.Height * width / originalImage.Width; 
       break; 
       case "H"://指定高,宽按比例 
       towidth = originalImage.Width * height / originalImage.Height; 
       break; 
       case "Cut"://指定高宽裁减(不变形) 
       if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight) 
       { 
       oh = originalImage.Height; 
       ow = originalImage.Height * towidth / toheight; 
       y = 0; 
       x = (originalImage.Width - ow) / 2; 
       } 
       else 
       { 
       ow = originalImage.Width; 
       oh = originalImage.Width * height / towidth; 
       x = 0; 
       y = (originalImage.Height - oh) / 2; 
       } 
       break; 
       default: 
       break; 
       } 
       
       //新建一个bmp图片 
       System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight); 
       
       //新建一个画板 
       System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap); 
       
       //设置高质量插值法 
       g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 
       
       //设置高质量,低速度呈现平滑程度 
       g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
       
       //清空画布并以透明背景色填充 
       g.Clear(System.Drawing.Color.Transparent); 
       
       //在指定位置并且按指定大小绘制原图片的指定部分 
       g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight), 
       new System.Drawing.Rectangle(x, y, ow, oh), 
       System.Drawing.GraphicsUnit.Pixel); 
       
       try 
       { 
       //以jpg格式保存缩略图 
       bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); 
       } 
       catch (System.Exception e) 
       { 
       throw e; 
       } 
       finally 
       { 
       originalImage.Dispose(); 
       bitmap.Dispose(); 
       g.Dispose(); 
       } 
       } 
       
       /**//// <summary> 
       /// 在图片上增加文字水印 
       /// </summary> 
       /// <param name="Path">原服务器图片路径</param> 
       /// <param name="Path_sy">生成的带文字水印的图片路径</param> 
       protected void AddShuiYinWord(string Path, string Path_sy) 
       { 
       string addText = "测试水印"; 
       System.Drawing.Image image = System.Drawing.Image.FromFile(Path); 
       System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image); 
       g.DrawImage(image, 0, 0, image.Width, image.Height); 
       System.Drawing.Font f = new System.Drawing.Font("Verdana", 16); 
       System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Blue); 
       
       g.DrawString(addText, f, b, 15, 15); 
       g.Dispose(); 
       
       image.Save(Path_sy); 
       image.Dispose(); 
       } 
       
       /**//// <summary> 
       /// 在图片上生成图片水印 
       /// </summary> 
       /// <param name="Path">原服务器图片路径</param> 
       /// <param name="Path_syp">生成的带图片水印的图片路径</param> 
       /// <param name="Path_sypf">水印图片路径</param> 
       protected void AddShuiYinPic(string Path, string Path_syp, string Path_sypf) 
       { 
       System.Drawing.Image image = System.Drawing.Image.FromFile(Path); 
       System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf); 
       System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image); 
       g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width,copyImage.Height, System.Drawing.GraphicsUnit.Pixel); 
       g.Dispose(); 
       
       image.Save(Path_syp); 
       image.Dispose(); 
       } 
      } 
      

  4.   


    using System;
    using System.IO;
    using System.Collections;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;namespace Imag_writer
    {
    /// <summary>
    /// 水印的类型
    /// </summary>
    public enum WaterMarkType
    {
       /// <summary>
       /// 文字水印
       /// </summary>
       TextMark,
       /// <summary>
       /// 图片水印
       /// </summary>
       //ImageMark // 暂时只能添加文字水印
    };/// <summary>
    /// 水印的位置
    /// </summary>
    public enum WaterMarkPosition
    {
       /// <summary>
       /// 左上角
       /// </summary>
       WMP_Left_Top,
       /// <summary>
       /// 左下角
       /// </summary>
       WMP_Left_Bottom,
       /// <summary>
       /// 右上角
       /// </summary>
       WMP_Right_Top,
       /// <summary>
       /// 右下角
       /// </summary>
       WMP_Right_Bottom
    };/// <summary>
    /// 处理图片的类(包括加水印,生成缩略图)
    /// </summary>
    public class ImageWaterMark
    {
       public ImageWaterMark()
       {
        //
        // TODO: 在此处添加构造函数逻辑
        //
       }   #region 给图片加水印
       /// <summary>
       /// 添加水印(分图片水印与文字水印两种)
       /// </summary>
       /// <param name="oldpath">原图片绝对地址</param>
       /// <param name="newpath">新图片放置的绝对地址</param>
       /// <param name="wmtType">要添加的水印的类型</param>
       /// <param name="sWaterMarkContent">水印内容,若添加文字水印,此即为要添加的文字;
       /// 若要添加图片水印,此为图片的路径</param>
       public void addWaterMark(string oldpath, string newpath, 
        WaterMarkType wmtType, string sWaterMarkContent)
       {
        try
        {
         Image image = Image.FromFile(oldpath);     Bitmap b = new Bitmap(image.Width, image.Height, 
          PixelFormat.Format24bppRgb);     Graphics g = Graphics.FromImage(b);
         g.Clear(Color.White);
         g.SmoothingMode = SmoothingMode.HighQuality;
         g.InterpolationMode = InterpolationMode.High;     g.DrawImage(image, 0, 0, image.Width, image.Height);     switch (wmtType)
         {
          /*case WaterMarkType.ImageMark:
           //图片水印
           this.addWaterImage(g, 
            Page.Server.MapPath(Waterimgpath), 
            WaterPosition,image.Width,image.Height);
           break;*/
          case WaterMarkType.TextMark:
           //文字水印
           this.addWaterText(g, sWaterMarkContent, "WM_BOTTOM_RIGHT", 
            image.Width, image.Height);
           break;
         }     b.Save(newpath);
         b.Dispose();
         image.Dispose();
        }
        catch
        {
         if(File.Exists(oldpath))
         {
          File.Delete(oldpath);
         }
        }
        finally
        {
         if(File.Exists(oldpath))
         {
          File.Delete(oldpath);
         }
        }  
       }   /// <summary>
       ///   加水印文字
       /// </summary>
       /// <param name="picture">imge 对象</param>
       /// <param name="_waterText">水印文字内容</param>
       /// <param name="_waterPosition">水印位置</param>
       /// <param name="_width">被加水印图片的宽</param>
       /// <param name="_height">被加水印图片的高</param>
       private void addWaterText(Graphics picture, string _waterText, 
        string _waterPosition, int _width, int _height)
       {
        // 确定水印文字的字体大小
        int[] sizes = new int[]{32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4};
        Font crFont = null;
        SizeF crSize = new SizeF();
        for (int i = 0;i < sizes.Length; i++)
        {
         crFont = new Font("Arial Black", sizes[i], FontStyle.Bold);
         crSize = picture.MeasureString(_waterText, crFont);     if((ushort)crSize.Width < (ushort)_width)
         {
          break;
         }
        }    // 生成水印图片(将文字写到图片中)
        Bitmap floatBmp = new Bitmap((int)crSize.Width + 3, 
              (int)crSize.Height + 3, PixelFormat.Format32bppArgb);
        Graphics fg=Graphics.FromImage(floatBmp);
        PointF pt=new PointF(0,0);    // 画阴影文字
        Brush TransparentBrush0 = new SolidBrush(Color.FromArgb(255, Color.Black));
        Brush TransparentBrush1 = new SolidBrush(Color.FromArgb(255, Color.Black));
        fg.DrawString(_waterText,crFont,TransparentBrush0, pt.X, pt.Y + 1); 
        fg.DrawString(_waterText,crFont,TransparentBrush0, pt.X + 1, pt.Y);     fg.DrawString(_waterText,crFont,TransparentBrush1, pt.X + 1, pt.Y + 1); 
        fg.DrawString(_waterText,crFont,TransparentBrush1, pt.X, pt.Y + 2); 
        fg.DrawString(_waterText,crFont,TransparentBrush1, pt.X + 2, pt.Y);     TransparentBrush0.Dispose(); 
        TransparentBrush1.Dispose();    // 画文字
        fg.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
        fg.DrawString(_waterText, 
         crFont, new SolidBrush(Color.White), 
         pt.X, pt.Y, StringFormat.GenericDefault);    // 保存刚才的操作
        fg.Save(); 
        fg.Dispose();
        // floatBmp.Save("d:\\WebSite\\DIGITALKM\\ttt.jpg");    // 将水印图片加到原图中
        this.addWaterImage(
         picture, 
         new Bitmap(floatBmp), 
         "WM_BOTTOM_RIGHT", 
         _width, 
         _height);
       }   /// <summary>
       ///   加水印图片
       /// </summary>
       /// <param name="picture">imge 对象</param>
       /// <param name="iTheImage">Image对象(以此图片为水印)</param>
       /// <param name="_waterPosition">水印位置</param>
       /// <param name="_width">被加水印图片的宽</param>
       /// <param name="_height">被加水印图片的高</param>
       private void addWaterImage( Graphics picture,Image iTheImage, 
        string _waterPosition,int _width,int _height)
       {
        Image water = new Bitmap(iTheImage);    ImageAttributes imageAttributes = new ImageAttributes();
        ColorMap colorMap = new ColorMap();    colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
        colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
        ColorMap[] remapTable = {colorMap};    imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);    float[][] colorMatrixElements = {
                 new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},
                 new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},
                 new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},
                 new float[] {0.0f, 0.0f, 0.0f, 0.3f, 0.0f},
                 new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}
                };    ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);    imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);    int xpos = 0;
        int ypos = 0;
        int WaterWidth = 0;
        int WaterHeight = 0;
        double bl = 1d;    
      

  5.   


    //计算水印图片的比率
        //取背景的1/4宽度来比较
        if ((_width > water.Width * 4) && (_height > water.Height * 4))
        {
         bl = 1;
        }
        else if ((_width > water.Width * 4) && (_height<water.Height * 4))
        {
         bl = Convert.ToDouble(_height / 4) / Convert.ToDouble(water.Height);
                
        }
        else if ((_width < water.Width * 4) && (_height > water.Height * 4))
        {
         bl = Convert.ToDouble(_width / 4) / Convert.ToDouble(water.Width);
        }
        else
        {
         if ((_width * water.Height) > (_height * water.Width))
         {
          bl = Convert.ToDouble(_height / 4) / Convert.ToDouble(water.Height);
                        
         }
         else
         {
          bl = Convert.ToDouble(_width / 4) / Convert.ToDouble(water.Width);
                        
         }
                
        }    WaterWidth = Convert.ToInt32(water.Width * bl);
        WaterHeight = Convert.ToInt32(water.Height * bl);    switch (_waterPosition)
        {
         case "WM_TOP_LEFT":
          xpos = 10;
          ypos = 10;
          break;
         case "WM_TOP_RIGHT":
          xpos = _width - WaterWidth - 10;
          ypos = 10;
          break;
         case "WM_BOTTOM_RIGHT":
          xpos = _width - WaterWidth - 10;
          ypos = _height -WaterHeight - 10;
          break;
         case "WM_BOTTOM_LEFT":
          xpos = 10;
          ypos = _height - WaterHeight - 10;
          break;
        }    picture.DrawImage(
         water, 
         new Rectangle(xpos, ypos, WaterWidth, WaterHeight), 
         0, 
         0, 
         water.Width, 
         water.Height, 
         GraphicsUnit.Pixel, 
         imageAttributes);    water.Dispose();
        imageAttributes.Dispose();
       }   /// <summary>
       ///   加水印图片
       /// </summary>
       /// <param name="picture">imge 对象</param>
       /// <param name="WaterMarkPicPath">水印图片的地址</param>
       /// <param name="_waterPosition">水印位置</param>
       /// <param name="_width">被加水印图片的宽</param>
       /// <param name="_height">被加水印图片的高</param>
       private void addWaterImage( Graphics picture,string WaterMarkPicPath, 
        string _waterPosition,int _width,int _height)
       {
        Image water = new Bitmap(WaterMarkPicPath);    this.addWaterImage(picture, water, _waterPosition, _width, 
         _height);
       }
       #endregion   #region 生成缩略图
       /// <summary>
       /// 保存图片
       /// </summary>
       /// <param name="image">Image 对象</param>
       /// <param name="savePath">保存路径</param>
       /// <param name="ici">指定格式的编解码参数</param>
       private void SaveImage(Image image, string savePath, ImageCodecInfo ici)
       {
        //设置 原图片 对象的 EncoderParameters 对象
        EncoderParameters parameters = new EncoderParameters(1);
        parameters.Param[0] = new EncoderParameter(
         System.Drawing.Imaging.Encoder.Quality, ((long) 90));
        image.Save(savePath, ici, parameters);
        parameters.Dispose();
       }   /// <summary>
       /// 获取图像编码解码器的所有相关信息
       /// </summary>
       /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>
       /// <returns>返回图像编码解码器的所有相关信息</returns>
       private ImageCodecInfo GetCodecInfo(string mimeType)
       {
        ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
        foreach(ImageCodecInfo ici in CodecInfo)
        {
         if(ici.MimeType == mimeType)
          return ici;
        }
        return null;
       }   /// <summary>
       /// 生成缩略图
       /// </summary>
       /// <param name="sourceImagePath">原图片路径(相对路径)</param>
       /// <param name="thumbnailImagePath">生成的缩略图路径,如果为空则保存为原图片路径(相对路径)</param>
       /// <param name="thumbnailImageWidth">缩略图的宽度(高度与按源图片比例自动生成)</param>
       public void ToThumbnailImages(
        string SourceImagePath,
        string ThumbnailImagePath,
        int ThumbnailImageWidth)
       {
        Hashtable htmimes = new Hashtable();
        htmimes[".jpeg"] = "image/jpeg";
        htmimes[".jpg"] = "image/jpeg";   
        htmimes[".png"] = "image/png";   
        htmimes[".tif"] = "image/tiff";
        htmimes[".tiff"] = "image/tiff";
        htmimes[".bmp"] = "image/bmp";
        htmimes[".gif"] = "image/gif";    // 取得原图片的后缀
        string sExt = SourceImagePath.Substring(
         SourceImagePath.LastIndexOf(".")).ToLower();    //从 原图片 创建 Image 对象
        Image image = Image.FromFile(SourceImagePath);  
        int num = ((ThumbnailImageWidth / 4) * 3);
        int width = image.Width;
        int height = image.Height;    //计算图片的比例
        if ((((double) width) / ((double) height)) >= 1.3333333333333333f)
        {
         num = ((height * ThumbnailImageWidth) / width);
        }
        else
        {
         ThumbnailImageWidth = ((width * num) / height);
        }
        if ((ThumbnailImageWidth < 1) || (num < 1))
        {
         return;
        }    //用指定的大小和格式初始化 Bitmap 类的新实例
        Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num, 
         PixelFormat.Format32bppArgb);    //从指定的 Image 对象创建新 Graphics 对象
        Graphics graphics = Graphics.FromImage(bitmap);    //清除整个绘图面并以透明背景色填充
        graphics.Clear(Color.Transparent);    graphics.SmoothingMode = SmoothingMode.HighQuality;
        graphics.InterpolationMode = InterpolationMode.High;    //在指定位置并且按指定大小绘制 原图片 对象
        graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));
        image.Dispose(); 
       
        try
        {   
         //将此 原图片 以指定格式并用指定的编解码参数保存到指定文件 
         SaveImage(bitmap, ThumbnailImagePath, 
          GetCodecInfo((string)htmimes[sExt]));
        }
        catch(System.Exception e)
        {
         throw e;
        }
       }
       #endregion
    }
    }