刚学习周公大哥的加水印效果:http://blog.csdn.net/zhoufoxcn/archive/2008/01/10/2033530.aspx发现这个效果是在图片显示时,给图片加上水印(好像还不能另存为了),但原图并没受到影响。这样好像很不错。我想问下为什么不直接在图片上传时,就给图片加上水印(是给图片的原图加上水印,也就是修改图片了),这样的话,显示图片时不就不需要再去加了吗。虽然是从缓存里面直接读取的。以前我也没研究过这个。不知道大家一般都是怎么做的?常用哪一种?谢谢~。

解决方案 »

  1.   

    右键添加新项-创建一个一般处理应用程序(后缀名.ashx)然后在这个一般处理应用程序引入两个命名空间using System.IO;//处理输出using System.Drawing;//用于画出两张图片的合成图片接下来添加ProcessRequest()方法代码<%@ WebHandler Language="C#" Class="myHanders" %>using System;using System.Web;using System.IO;using System.Drawing;public class myHanders : IHttpHandler {       public void ProcessRequest (HttpContext context) {        //根据请求URL获取相应服务器的物理路径        string path = context.Request.MapPath("~/image/");        //加载两幅图片        Image warterImg = Image.FromFile(path+"WaterMark.jpg");//水印图片        Image baseImg = Image.FromFile(path+"Q01.jpg");        //获取基图片的画布对象        Graphics g = Graphics.FromImage(baseImg);//Graphics下有好多可选方法,这里选择用一张图片        //计算水印图片的左上角坐标        int x = baseImg.Width - warterImg.Width;        int y = baseImg.Height - warterImg.Height;        //在baseImg图片上画上warterImg图片        g.DrawImage(warterImg, x, y, warterImg.Width, warterImg.Height);//DrawImage参数,1.在画布上要画的图片,即水印图片        //参数2、3,起点画笔的坐标,参数3要画的长度,参数4要画的高度        //释放画布对象和水印图片对象        g.Dispose();        warterImg.Dispose();        //指定往输出流中注入的对象类型        context.Request.ContentType = "image/jpeg";        //把新绘制的图形保存到输出流中        //System.Drawing.Imaging.ImageFormat.Jpeg表示输出图片的格式        //context.Response.OutputStream表示数据流        baseImg.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);        //释放新绘制的图形对象        baseImg.Dispose();//这些对象可以不释放,但最好释放        //技术Http响应流,因为该方法是Response流的最后的处理方法        context.Response.End();    }    public bool IsReusable {        get {            return false;        }    }}添加一个网页,拖入一个Img对象(这里图片的src属性应设置为*.ashx即我们刚才所创建的一般应用处理程序)这里我们选择我们刚才所创建的myHanders.ashx,即可,运行结果上面这个例子是固定的,为了能够根据数据库查询自动组合
      

  2.   

    string mapho = request["imgpath"];//获取某个页面传过的图片名称  string str1 = Server.MapPath(mapho);//要添加水印的图片  string str2 = Server.MapPath("WaterMark.jpg");//添加的内容图片  System.Drawing.Image bmp = System.Drawing.Image.FromFile(str1);  Graphics gs = Graphics.FromImage(bmp);
    System.Drawing.Image bmp2 = System.Drawing.Image.FromFile(str2);  //两张图片合并  gs.DrawImage(bmp2, bmp.Width-bmp2.Width, bmp.Height - bmp2.Height, bmp2.Width, bmp2.Height);  Response.ContentType = "image/jpeg";//输出类型  bmp.Save(Response.OutputStream,ImageFormat.Jpeg);//保存用法:
    新建一个页面在页面加载事件里添加以上代码。在要用这个图片的时候把它的图片URL地址等于这个页面就可以了.例如:<asp:image runat="server" ImageUrl="以上页面的名称.aspx?imgpath="+"图片名称"></asp:image>本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhlu880516/archive/2010/04/16/5492473.aspx
      

  3.   

    读取原图,根据水印图片合成,再保存为一张图片
    http://topic.csdn.net/u/20090508/19/df8e5338-3a46-4f96-8ab5-e04bc72c9874.html
      

  4.   

    现在基本上都是上传得时候就加上了水印或者是把压力放在客户端,客户端访问的时候附加另一个url的层面,与原图层面叠合在 一起(如果此工作放在服务器端,消耗的资源不小)
      

  5.   

    http://blog.csdn.net/21aspnet/archive/2007/03/20/1534350.aspx
      

  6.   

    http://www.cnblogs.com/jillzhang/archive/2005/12/20/300593.html