ASP.NET MVC中的生成图片

开发工具与关键技术:VS+生成图片
作者: 李伙
撰写时间: 2019年5月5日

在MVC中,在学习重庆邮电大学这个项目时,学到证书维护这个页面时,里面有个生成图片的方法,是将学生的合格成绩生成一张合格证书的图片,我们在以后做项目时也可以参考生成图片的方法来生成我们需要的图片,下面以生成图片的方法为例,我们简单认识一下。先看看js部分的代码:
ASP.NET MVC中的生成图片
如上图所示:首先是获取证书信息表的选中行,我们可以用“console.log()”在控制台输出看看我们需要哪些数据,在这里我们需要的是证书ID。然后用“if(){}else{}”判断我们选中的数据,因为生成图片是一张一张的生成的,所以我们既要判断用户是否选中数据,如果没有选中数据,就提醒用户选择一条数据生成图片;也要判断用户是否选择了多条数据来生成图片,如果选择了多条数据,就提醒用户只能选择一条数据生成图片,如果选择了一条数据,就继续执行下面的代码。判断完成后,就定义一个变量来接收我们选中的证书ID,然后写一个“window.open()”方法,这里用到window 对象,window 对象表示浏览器中打开的窗口,“open()”是一个方法,“open()”表示打开一个新的浏览器窗口或者查找一个已命名的窗口。这里很明显是一个已命名的窗口,然后在已命名的窗口后面拼接上筛选条件,拼接时一定不能漏掉“? =”这些字符,不然会报错。
因为这里用到layui插件,因此在使用前要先引用layui插件里面的css文件以及js文件,然后在“$(function(){});”里面加载&&初始化layui模块,否则会报错。加载&&初始化layui模块前要先定义一个全局变量,具体格式如下:
ASP.NET MVC中的生成图片
写完js部分的代码后,就到控制器写控制器的代码。
ASP.NET MVC中的生成图片
如上图所示:var是匿名数据类型 一般在linq中使用,编译时会自动转化成具体的数据类型。如果已知变量是什么数据类型可以用具体的数据类型。
这里用到了多表联表查询,多表联表查询都会用到“join in”来进行表与表之间的连接,而表与表之间的连接都会根据表与表之间的主键和外键的关系来进行连接。
图中 where为条件查询,关系运算符为两个等号,这里根据证书表的证书ID==页面传过来的证书ID来进行判断。
然后用select new{}来将序列中的每个元素投影到新表中,上图是投影到我们自定义的表名中。
因为查询出来的数据只能是一条数据所以要用Single()接收,Single()的结果只能有一条数据,0条或者大于等于2条都会出现异常,所以一般需要用“try{}catch(Exception){}”来捕获异常。
查询出数据后,接下来就是生成图片了,这里的代码是重中之重了,我们主要记的代码就是下面的代码了,先看看代码:
ASP.NET MVC中的生成图片
如上图所示:(1)首先获取空白证书的物理地址,因为我们生成图片前要先准备一张图片,相当于画板,有了画板我们才能往里面写入数据。MapPath():在派生类中重写时,返回与Web服务器上的指定虚拟路径相对应的物理文件路径,“MapPath ()”括号中写空白证书所在的文件路径。
(2)将图片转化为位图(栅格图),Bitmap:封装GDI+位图,此位图由图形图像及其特性的像素数据组成,是用于处理由像素数据定义的图像的对象。
(3)封装一个绘图图画,Graphics:封装一个GDI+绘图图画。此类不能被继承。FromImage:表示从指定的Image创建新的Graphics。即把bitmap封装成一个绘图图画。
(4)定义单色的画笔,SolidBrush:表示定义单色画笔,画笔用于填充图形形状,如矩形、椭圆、扇形、多边形和封闭路径。Color:表示一种ARGB颜色。
(5)绘制内容,DrawString():在指定的位置用指定的画笔(Brush)和字体(Font)对象绘制指定的文本字符串。DrawString()里有4个参数一定要写入的,第一个参数是要绘制的文本内容;第二个参数是所使用的字体,例如“宋体”;第三个参数是绘制文本的画刷,即前面定义好的单色画笔;第四个参数是开始绘制的坐标点,即横坐标以及纵坐标。
(6)将图像以流的形式输出,MemoryStream:表示创建其支持存储区为内存的流。
(7)将图像以jpeg的格式保存到流中,Save():将此图像以指定的格式保存到指定的流中。ImageFormat:表示指定图像的文件格式,上图指定的格式为Jpeg格式。
(8)以byte类型输出,ToArray():表示将流内容写入字节数组,而与MemoryStream.Position无关。
(9)返回,以File返回。
这样,生成图片的方法就写好了,我们以后也可以参考生成图片的方法来生成我们需要的图片。