• 打水印


    <%@ 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;
            }
        }
    }
  • 相关阅读:
    POJ1270 Following Orders[拓扑排序所有方案 Kahn]
    拓扑排序 POJ2367Genealogical tree[topo-sort]
    如何使用MySQL Workbench创建数据库存储过程
    sql server数据库中 smallint, int ,bigint ,tinyint的区别与长度
    now() 的用法
    存储过程制造数据
    JMeter—系统性能分析思路
    JMeter—监听器
    JMeter—断言
    Jmeter后置处理器之JSON Extractor
  • 原文地址:https://www.cnblogs.com/daixingqing/p/2768373.html
Copyright © 2020-2023  润新知