博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义一个处理图片的HttpHandler
阅读量:4323 次
发布时间:2019-06-06

本文共 3079 字,大约阅读时间需要 10 分钟。

有时项目里我们必须将图片进行一定的操作,例如水印,下载等,为了方便和管理我们可以自定义一个HttpHander 来负责这些工作

后台:

public class ImageHandler : IHttpHandler    {        #region IHttpHandler Members        public bool IsReusable        {            get { return true; }        }        ///         /// 实现IHTTPHandler后必须实现的方法        ///         /// HttpContext上下文        public void ProcessRequest(HttpContext context)        {            context.Response.Clear();            //得到图片名            var imageName = context.Request["ImageName"] == null ? "逆时针的风"                : context.Request["ImageName"].ToString();            //得到图片ID,这里只是演示,实际项目中不是这么做的            var id = context.Request["Id"] == null ? "01"                : context.Request["Id"].ToString();            //得到图片地址            var stringFilePath = context.Server.MapPath(string.Format("~/Image/{0}{1}.jpg", imageName, id));            //声明一个FileStream用来将图片暂时放入流中            FileStream stream = new FileStream(stringFilePath, FileMode.Open);            using (stream)            {                //透过GetImageFromStream方法将图片放入byte数组中                byte[] imageBytes = this.GetImageFromStream(stream,context);                //上下文确定写到客户短时的文件类型                context.Response.ContentType = "image/jpeg";                //上下文将imageBytes中的数据写到前段                context.Response.BinaryWrite(imageBytes);                stream.Close();            }        }        ///         /// 将流中的图片信息放入byte数组后返回该数组        ///         /// 文件流        /// 上下文        /// 
private byte[] GetImageFromStream(FileStream stream, HttpContext context) { //通过stream得到Image Image image = Image.FromStream(stream); //加上水印 image = SetWaterImage(image, context); //得到一个ms对象 MemoryStream ms = new MemoryStream(); using (ms) { //将图片保存至内存流 image.Save(ms, ImageFormat.Jpeg); byte[] imageBytes = new byte[ms.Length]; ms.Position = 0; //通过内存流读取到imageBytes ms.Read(imageBytes, 0, imageBytes.Length); ms.Close(); //返回imageBytes return imageBytes; } } /// /// 为图片加上水印,这个方法不用在意,只是演示,所以没加透明度 /// 下次再加上吧 /// /// 需要加水印的图片 /// 上下文 ///
private Image SetWaterImage(Image image,HttpContext context) { Graphics graphics = Graphics.FromImage(image); Image waterImage = Image.FromFile(context.Server.MapPath("~/Image/逆时针的风01.jpg")); //在大图右下角画上水印图就行 graphics.DrawImage(waterImage, new Point { X = image.Size.Width - waterImage.Size.Width, Y = image.Size.Height - waterImage.Size.Height }); return image; } #endregion }

别忘了还要在Web.Config中进行配置,别忘记verb和path属性,否则会报错

这样前台便能使用了

About

Put content here.

输出结果

转载于:https://www.cnblogs.com/sjqq/p/6786410.html

你可能感兴趣的文章
再也不学AJAX了!(三)跨域获取资源 ③ - WebSocket & postMessage
查看>>
pycharm设置python文件颜色
查看>>
不换行输出的两种方式
查看>>
贵在坚持不懈
查看>>
hdu 1251 统计难题
查看>>
java中关于String 类型数据 的存储方式
查看>>
javascript中的with语句
查看>>
常用设计模式:装饰者模式
查看>>
python接口自动化--get请求
查看>>
ajax 上传文件
查看>>
lintcode-easy-Flatten Binary Tree to Linked List
查看>>
从远程队列中读取消息
查看>>
typescript 接口的新认识
查看>>
java常见面试题及三大框架面试
查看>>
懒惰的肥兔博文导读
查看>>
[db] mongodb 存取修改简单小实例
查看>>
面试百题003——求子数组的最大和
查看>>
jq.validate 自定义验证两个日期
查看>>
公布一个以前写的随机数生成的方法
查看>>
AtCoder Regular Contest 077 被虐记&题解
查看>>