007-一般处理程序动态处理图片

-》使用GDI+完成图片的处理,需要引入程序集System.Drawing
-》GDI+的基本处理模型
《1》创建画布Bitmap
《2》创建画图工具对象Graphics
《3》调用Draw***、Fill***系列方法完成绘制
《4》保存,可以保存到物理文件中,也可以保存到输出流中
在ashx中使用,需要指定ContentType="image/jpeg";
使用画布对象的Save()方法输出,可以输出到一个物理文件中,也可以输出到流中
使用:<img src="pic.ashx"/>
-》示例1:生成水印图
思路:在原有图片上绘制一段文字或小图片
-》示例2:生成验证码
思路:创建画布,随机生成字符并绘制
附加功能:“看不清,换一张”
-》示例3:缩略图
思路:将原图按照一个缩小比例,绘制到一个新图上,并完成物理保存

加水印

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 5     <title></title>
 6 </head>
 7 <body>
 8     <form method="POST" action="AddWater.ashx" enctype="multipart/form-data">
 9         <input type="file" name="f1"/>
10         <br/>
11         <input type="submit" value="加水印"/>
12     </form>
13 </body>
14 </html>
 1         public void ProcessRequest(HttpContext context)
 2         {
 3             context.Response.ContentType = "text/html";
 4
 5             //接收文件
 6             HttpPostedFile file1 = context.Request.Files["f1"];
 7
 8             //根据上传流创建画布
 9             Image bitmap1 = Bitmap.FromStream(file1.InputStream);
10
11             //获取绘制工具
12             Graphics graphics = Graphics.FromImage(bitmap1);
13
14             //根据logo图片创建image对象
15             Image logoImage = Bitmap.FromFile(context.Request.MapPath("/Uploads/logo.gif"));
16
17             //绘制logo图片
18             graphics.DrawImage(logoImage,
19                 bitmap1.Width - logoImage.Width,
20                 bitmap1.Height - logoImage.Height,
21                 logoImage.Width,
22                 logoImage.Height);
23
24             //保存
25             string path = GetDirectory();
26             string path2 = context.Request.MapPath(path);
27             if (!Directory.Exists(path2))
28             {
29                 Directory.CreateDirectory(path2);
30             }
31             bitmap1.Save(path2+file1.FileName,ImageFormat.Jpeg);
32
33             context.Response.Write("<img src=‘"+path+file1.FileName+"‘/>");
34         }
35
36         private string GetDirectory()
37         {
38             DateTime now = DateTime.Now;
39             StringBuilder sb = new StringBuilder("/Uploads/");
40             sb.Append(now.Year + "/");
41             sb.Append(now.Month + "/");
42             sb.Append(now.Day + "/");
43
44             return sb.ToString();
45         }

验证码

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 5     <title></title>
 6     <script>
 7         function ChangeCode() {
 8             var vCode = document.getElementById(‘vCode‘);
 9             vCode.src = ‘ValidateCode.ashx?r=‘+Math.random();
10         }
11     </script>
12 </head>
13     <body>
14         <input type="text"/>
15         <img id="vCode" src="ValidateCode.ashx" onclick="ChangeCode();"/>
16         <a href="javascript:ChangeCode();">看不清,换一张</a>
17     </body>
18 </html>
 1         public void ProcessRequest(HttpContext context)
 2         {
 3             context.Response.ContentType = "image/jpeg";
 4
 5             //创建画布
 6             Bitmap bitmap=new Bitmap(70,30);
 7
 8             //bitmap.SetPixel(x,y,color);
 9
10             //获取绘制工具
11             Graphics graphics = Graphics.FromImage(bitmap);
12
13             //刷背景
14             graphics.Clear(Color.White);
15
16             //绘制边框
17             graphics.DrawRectangle(new Pen(Color.Black), 0,0,69,29);
18
19             //获取字符串
20             string temp = "abcdef0123456789";
21
22             int len = 4,len2=temp.Length;
23             StringBuilder sb=new StringBuilder("");
24             Random random=new Random();
25             for (int i = 0; i < len; i++)
26             {
27                 int index= random.Next(0, len2);
28                 sb.Append(temp[index].ToString());
29             }
30             string temp1 = sb.ToString();
31
32             //绘制字符串
33             graphics.DrawString(temp1,
34                 new Font("宋体",20),
35                 new SolidBrush(Color.Red),
36                 0,0
37                 );
38
39             //保存
40             bitmap.Save(context.Response.OutputStream,ImageFormat.Jpeg);
41
42         }
时间: 2024-10-16 08:43:46

007-一般处理程序动态处理图片的相关文章

ASP.NET知识总结(一般处理程序动态处理图片(验证码、水印、缩略图))

->使用GDI+完成图片的处理,需要引入程序集System.Drawing ->GDI+的基本处理模型 <1>创建画布Bitmap <2>创建画图工具对象Graphics <3>调用Draw***.Fill***系列方法完成绘制 <4>保存,可以保存到物理文件中,也可以保存到输出流中 在ashx中使用,需要指定ContentType="image/jpeg"; 使用画布对象的Save()方法输出,可以输出到一个物理文件中,也可

asp.net一般处理程序(.ashx)动态生成验证码案例。

{使用一般处理程序动态生成验证码} 1.新建WebSite项目,添加一般处理程序命名为  yzm.ashx,添加如下代码: public void ProcessRequest(HttpContext context)    {   //将context.Response.ContentType = "text/plain";修改为context.Response.ContentType = "image/JPEG";        context.Response

20150204--JS巩固与加强2-01

JavaScript巩固与加强二 目录 JavaScript巩固与加强二... 1 一.事件编程... 3 1.什么是事件驱动式?... 3 2.什么是事件处理程序... 3 3.JavaScript中常用的事件... 4 二.事件绑定... 6 1.什么是事件绑定... 6 2.事件绑定分类... 6 3.行内绑定... 7 4.动态绑定... 8 5.行内绑定与动态绑定区别... 9 6.事件监听... 10 1)IE模型事件监听基本语法... 10 2)W3C模型下事件监听基本语法:...

GD Library extension not available

在后台文章上传封面时,遇到了这样一个错误 GD Library extension not available with this PHP installation Ubuntu Nginx 自己在本地开发环境上用到了Intervention/image,但是部署代码到服务器后为考虑到开启GD扩展,导致在使用时遇到了这个错误,通过搜索引擎,找到了解决方案.简单概括就是要安装对应版本的GD库.以下内容是stackoverflow上一个回答的搬运分享. GD图形扩展库是一个可动态处理图片的PHP扩展

Spring-IOC:Bean的作用域、生命周期、XML的装配、注解注入、@Autowired

8. 使用注解开发 在spring4之后,要使用注解开发,必须要保证aop的包导入了. 使用注解需要导入context约束,增加注解的支持! <!--指定要扫描的包,这个包下的注解会生效--> <context:component-scan base-package="com.kuang.pojo"/> bean 属性如何注入 //等价于<bean id="user" class="com.kuang.pojo.User&qu

《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中

http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转换成JSON,然后传递到前台JS文件中,JS解析JSON数据,并将数据显示在界面,主要介绍两种显示方式,显示在DropDownList控件 or 显示在动态创建的Table表中.   本文主要介绍两个地方: 1.根据学年查询学期信息的实现--JS将解析的JSON数据绑定到DropDownList框

一般处理程序ashx结合gdi+处理图片

1 新建一般处理程序  .ashx public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain";context.Response.Write("Hello World"); } 2. 引入命名空间  using System.Drawing; 3.因为是操作图片所以把context.Response.ContentType = "

java动态代理的实现

动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程. 友情提示:本文略有难度,读者需具备代理模式相关基础知识,. 通常情况下,代理模式中的每一个代理类在编译之后都会生成一个class文件,代理类所实现的接口和所代理的方法都被固定,这种代理被称之为静态代理(Static Proxy).那么有没有一种机制能够让系统在运行时动态创建代理类?答案就是本文将要介绍的动态代理(Dynamic Proxy).动态代理是一种较

浅谈java中内置的观察者模式与动态代理的实现

一.关于观察者模式 1.将观察者与被观察者分离开来,当被观察者发生变化时,将通知所有观察者,观察者会根据这些变化做出对应的处理. 2.jdk里已经提供对应的Observer接口(观察者接口)与Observable(被观察者类)用于实现观察者模式 3.关于Observer接口,该接口只有一个update方法,当被观察者发生相关变化时,会通知所有的观察者,观察者接受到通知时,调用update方法进行处理.贴出源代码: 1 /* 2 * Copyright (c) 1994, 1998, Oracle