打水印

<%@ WebHandler Language="C#" Class="ImageWater" %>

using System;
using System.Web;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;

public class ImageWater : IHttpHandler
{
    private string imagepath = "~/ImageFiles/"; //图片所在的文件夹
    private const string waterimage = "~/ImageFiles/kg.png"; //水印图片
    private const string defaultimage = "~/ImageFiles/noperson.jpg"; //没有找到图片时显示的图片
    private const float alpha = 0.5F; //透明度

    public void ProcessRequest(HttpContext context)
    {
        imagepath += context.Request.QueryString["title"];//获得图片名称        
        Image image; //图片类
        if (File.Exists(context.Server.MapPath(imagepath)))
        {
            if (Path.GetExtension(context.Server.MapPath(imagepath)).ToLower() == ".gif")
            {
                //生成的高质量图片名称
                //string strGoodFile = context.Request.MapPath(imagepath).Substring(0, context.Request.MapPath(imagepath).LastIndexOf(".")) + ".jpg";
                //从文件取得图片对象
                image = Image.FromFile(context.Server.MapPath(imagepath));
                //取得图片大小
                Size size = new Size(380, 380);
                //新建一个bmp图片
                Image bitmap = new System.Drawing.Bitmap(size.Width, size.Height);
                //新建一个画板
                Graphics g = System.Drawing.Graphics.FromImage(bitmap);
                //设置高质量插值法
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                //设置高质量,低速度呈现平滑程度
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                //清空一下画布
                g.Clear(Color.Blue);
                //在指定位置画图
                g.DrawImage(image, new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
                new System.Drawing.Rectangle(0, 0, image.Width, image.Height),
                GraphicsUnit.Pixel);
                ///文字水印
                Graphics G = System.Drawing.Graphics.FromImage(bitmap);
                Font f = new Font("宋体", 10);
                Brush b = new SolidBrush(Color.Black);
                G.DrawString("", f, b, 10, 10);
                G.Dispose();
                ///图片水印
                Image copyImage = Image.FromFile(context.Server.MapPath(waterimage));
                //关于透明度(使用颜色矩阵)
                float[][] nArray ={ new float[] {1, 0, 0, 0, 0},
                                     new float[] {0, 1, 0, 0, 0},
                                    new float[] {0, 0, 1, 0, 0},
                                    new float[] {0, 0, 0,alpha , 0},
                                    new float[] {0, 0, 0, 0, 1}};
                ColorMatrix colormatrix = new ColorMatrix(nArray);
                ImageAttributes attributes = new ImageAttributes();
                attributes.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                Graphics a = Graphics.FromImage(bitmap);
                a.DrawImage(copyImage, new Rectangle(bitmap.Width - copyImage.Width, bitmap.Height - copyImage.Height, copyImage.Width, copyImage.Height),
                    0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel, attributes);
                copyImage.Dispose();
                a.Dispose();
                copyImage.Dispose();
                //保存高清晰度的缩略图
                context.Response.ContentType = "image/jpeg";//输出图片的类型
                //bitmap.Save(strGoodFile, ImageFormat.Jpeg);
                bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);//将图片存入输出流
                g.Dispose();
                context.Response.End();
            }
            else
            {
                image = Image.FromFile(context.Server.MapPath(imagepath));//将图片内容放到image对象
                Graphics g = Graphics.FromImage(image); //获得Graphics 对象
                Image watermark = Image.FromFile(context.Server.MapPath(waterimage));//将水印图片放入watermark 对象
                //关于透明度(使用颜色矩阵)
                float[][] nArray ={ new float[] {1, 0, 0, 0, 0},
                                     new float[] {0, 1, 0, 0, 0},
                                    new float[] {0, 0, 1, 0, 0},
                                    new float[] {0, 0, 0,alpha , 0},
                                    new float[] {0, 0, 0, 0, 1}};
                ColorMatrix colormatrix = new ColorMatrix(nArray);
                ImageAttributes attributes = new ImageAttributes();
                attributes.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                g.DrawImage(watermark, new Rectangle(image.Width - watermark.Width, image.Height - watermark.Height,
                   watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, attributes);
                //在图片指定坐标处放入一个矩形图片内容为水印图片
                g.Dispose();
                watermark.Dispose();
                context.Response.ContentType = "image/jpeg";//输出图片的类型
                image.Save(context.Response.OutputStream, ImageFormat.Jpeg);//将图片存入输出流
                image.Dispose();
                context.Response.End();
            }
        }
        else
        {
            image = Image.FromFile(context.Server.MapPath(defaultimage));//如果不存在图片就输出defaultimage。
            context.Response.ContentType = "image/jpeg";//输出图片的类型
            image.Save(context.Response.OutputStream, ImageFormat.Jpeg);//将图片存入输出流
            image.Dispose();
            context.Response.End();
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

 

posted @ 2012-11-13 17:24  一千零一夜  阅读(218)  评论(0编辑  收藏  举报