注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我只是一个人

我爱一个人

 
 
 

日志

 
 

上传并添加水印图  

2011-05-17 12:43:29|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

新建一个ImageManager.cs类文件,放在那里你知道的

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Text;

using System.IO;

using System.Collections;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

namespace ImageWriter

{

     public class ImageManager

    {

        #region 变量声明开始

             public enum WatermarkPosition

        {

            LeftTop,

            Left,

            LeftBottom,

            Top,

            Center,

            Bottom,

            RightTop,

             RightCenter,

            RigthBottom

        }

        #endregion 变量声明结束

 

        #region 私有函数开始

 

        private string GetFileName(string path)

        {

            return path.Remove(path.LastIndexOf('.')).ToLower();

        }

 

        private string GetExtension(string path)

        {

            return path.Remove(0, path.LastIndexOf('.')).ToLower();

        }

        /// 获取: 图片以 '.' 开头的小写字符串扩展名对应的 System.Drawing.Imaging.ImageFormat 对象 

        private ImageFormat GetImageFormat(string format)

        {

            switch (format)

            {

                case ".bmp":

                    return ImageFormat.Bmp;

                case ".emf":

                    return ImageFormat.Emf;

                case ".exif":

                    return ImageFormat.Exif;

                case ".gif":

                    return ImageFormat.Gif;

                case ".ico":

                    return ImageFormat.Icon;

                case ".png":

                    return ImageFormat.Png;

                case ".tif":

                    return ImageFormat.Tiff;

                case ".tiff":

                    return ImageFormat.Tiff;

                case ".wmf":

                    return ImageFormat.Wmf;

                default:

                    return ImageFormat.Jpeg;

            }

        }

        #endregion 私有函数结束

        //控件id,原图(封装到GDI+中的位图对象),水印图,位置,边距,透明度(0.0f-1.0f),保存路径(映射后的地址包括路径,扩展名)

 

        public void Rrd(FileUpload fu,Bitmap wBitmap, WatermarkPosition position, int margin, float transparence, string writepath)

        { ///判断图片的内容是否为空

            if (fu.HasFile == false || fu.PostedFile.ContentLength <= 0)

            {

                return;

            }

            ///获取图片名称(不包含扩展名)

            string factFilename = Path.GetFileName(fu.FileName);

            ///获取图片的类型和大小和图片名称(不包含扩展名)

            string type = fu.PostedFile.ContentType;

            int size = fu.PostedFile.ContentLength;

            if (size <= 0) return;

            ///读取图片的流信息

            byte[] data = new byte[size];

            fu.PostedFile.InputStream.Read(data, 0, size);

            if (data == null) return;

            ///创建源图

            MemoryStream stream = new MemoryStream(data);

            System.Drawing.Image simage = System.Drawing.Image.FromStream((Stream)stream);

            ///根据源图的宽度和高度创建一个新的bmp图片

            System.Drawing.Image sBitmap = new Bitmap(simage.Width, simage.Height);

            //调用方法设置水印透明度,大小,位置

            Graphics graphics = Graphics.FromImage(sBitmap);  //封装到GDI+绘图画面

            ///设置高质量插值法

            graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

            ///设置高质量,低速度呈现平滑程度

            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            ///清空画布,并把背景色设置为透明

            graphics.Clear(System.Drawing.Color.Transparent);

            graphics.DrawImage(simage,new System.Drawing.Rectangle(0, 0, simage.Width, simage.Height),new System.Drawing.Rectangle(0, 0, simage.Width, simage.Height), System.Drawing.GraphicsUnit.Pixel);

            //设置水印图片大小以及水印在图片上的位置

            int X = sBitmap.Width;  //原图宽度

            int Y = sBitmap.Height;  //原图高度

            int x = wBitmap.Width / 2;  //水印宽度

            int y = wBitmap.Height / 2; //水印高度

            int i = margin;  // 边距

            Rectangle rt = new Rectangle();

            switch (position)

            {

                case WatermarkPosition.LeftTop:

                    rt = new Rectangle(i, i, x, y);

                    break;

                case WatermarkPosition.Left:

                    rt = new Rectangle(i, (Y - y) / 2, x, y);

                    break;

                case WatermarkPosition.LeftBottom:

                    rt = new Rectangle(i, Y - y - i, x, y);

                    break;

                case WatermarkPosition.Top:

                    rt = new Rectangle((X - x) / 2, i, x, y);

                    break;

                case WatermarkPosition.Center:

                    rt = new Rectangle((X - x) / 2, (Y - y) / 2, x, y);

                    break;

                case WatermarkPosition.Bottom:

                    rt = new Rectangle((X - x) / 2, Y - y - i, x, y);

                    break;

                case WatermarkPosition.RightTop:

                    rt = new Rectangle(X - x - i, i, x, y);

                    break;

                case WatermarkPosition.RightCenter:

                    rt = new Rectangle(X - x - i, (Y - y) / 2, x, y);

                    break;

                default:

                    rt = new Rectangle(X - x - i, Y - y - i, x, y);

                    break;

            }

            //水印透明度(值越高透明度越低,范围在0.0f~1.0f之间): float

            if (transparence == 0.0f || transparence == 1.0f)

            {

                throw new ArgumentException("透明度值只能在0.0f~1.0f之间");

                return;

            }

            float[][] floatArray =  

            

                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, transparence, 0.0f }, 

                new float[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }  

            };

            ImageAttributes imageAttributes = new ImageAttributes();

            imageAttributes.SetColorMatrix(new ColorMatrix(floatArray), ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

            //在制定的位置00开始,按指定的大小sBitmap.width,sBitmap.Height绘制sBitmap

            graphics.DrawImage(wBitmap, rt);   //在矩形中绘制水印图片,矩形位置在原图中已经设定好了位置

         try

            {

                sBitmap.Save(writepath, GetImageFormat(GetExtension(writepath))); //以指定的格式保存到指定的位置

                sBitmap.Dispose();

            }

            catch (Exception e)

            {

                throw new Exception(e.Message);

            }

            imageAttributes.Dispose();

            sBitmap.Dispose();

            wBitmap.Dispose();

        }

    }

}

  评论这张
 
阅读(113)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018