后台生成图片

本文档介绍了如何在后台生成包含个人信息的证书图片。通过Visual Studio 2015,实现选择表格数据后点击生成图片按钮,将姓名、时间、分数等信息整合进证书模板,涉及数据库联表查询和图片处理技术。

文献种类:专题技术文献;

开发工具与关键技术:Visual Studio 2015 后台生成图片及下载

作者: ;年级: ;撰写时间: 年 月 日

文献编号: ;归档时间: 月 日

                             		        后台生成图片

开发工具与关键技术:Visual
Studio 2015   后台生成图片及下载

作者:廖茂

撰写时间:2019年5月16日

在做项目的过程中,总会碰到一些功能是比较有意思的,这次要说的是怎样在后台生成图片。

在这里,我们要生成的图片是一个证书,证书原始图片如下:
在这里插入图片描述
需要把“姓名、时间、分数、证书编号、颁发时间”这些信息放进图片里面生成一张完整的证书图片,页面的操作步骤为“选择一个表格里面的一条数据—>点击生成图片按钮—>生成证书图片”,首先是第一步:
在这里插入图片描述
选择表格的一条数据,每次只能生成一张图片,然后点击一个生成图片的按钮:
在这里插入图片描述
然后生成一张图片:
在这里插入图片描述
步骤介绍完了,接下来进入代码的编写。
首先编写视图里面的方法:
在这里插入图片描述
首先我们需要获取到选中的行数,然后判断当前是否只选择一条数据,如果行数等于一,就声明一个变量获取证书ID,然后用window中的open方法打开生成图片的页面,open方法中的路径连接的是控制器中的控制流程方法,同时把参数传到控制器。再判断如果行数大于一,则返回“只能选择一条数据生成图片”的提示,,如果行数等于零,则返回“请选择一条数据生成图片”,代码如下:

if (checkStatus.data.length == 1){
	var CertificateID = checkStatus.data[0].CertificateID;

	window.open("DownloadCert?certificateId=" + CertificateID);
}
 else if (checkStatus.data.length > 1)
 {
 	layer.alert("只能选择一条数据生成图片!")
 }
else {
	layer.alert("请选择一条数据生成图片!")
}

在这个操作中,表格中的数据涉及到数据库中的四张表,“证书表、成绩表、用户表、学生表”,所以在控制器中需要进行联表查询,把查询到的数据赋值给dbCertificate这个变量:
在这里插入图片描述
把证书表、成绩表、用户表和学生表联系起来查询出“考生姓名、考试时间、成绩、证书编号、证书颁发时间”这些数据,数据获取代码如下:

tbStudent.StudentName, 
tbAchievement.StTime,
tbAchievement.Achievement, 
tbCertificate.CertificateNumber,
tbCertificate.IssuanceTime

数据获取到了,就要有一个把数据写进去的图片,那么就要通过物理路径获取一张图片:

string filePath = Server.MapPath("~/Content/images/Credential2.png");

到了这一步,我们需要添加一个引用,用于下面图片的转换等操作:

using System.Drawing;

添加完引用后,为了能把数据绘制进图片里面,所以需要把图片转化为位图(栅格图),转换成位图(栅格图)之后,我们就可以用像素以横纵坐标的方式确定绘制数据的位置:

Bitmap bitmap = new Bitmap(filePath);

然后封装一个图面:

Graphics g = Graphics.FromImage(bitmap);

接着定义一个单色的画笔,用于绘制数据,颜色可以自行选择:

SolidBrush solidBrush = new SolidBrush(Color.Black);

接下来开始绘制数据,第一个是姓名:

g.DrawString(dbCertificate.StudentName, new Font("宋体", 14), solidBrush, 110, 146);

上面代码中的DrawString得用法是“DrawString(要绘制的文本内容,使用的字体,绘制文本的画刷,开始绘制的坐标点)”,这样就能把数据绘制到图片里面了,接着来绘制第二个数据“时间”:
在这里插入图片描述
绘制时间的时候需要注意,因为时间的年、月、日是分开的,所以需要分开绘制,剩下的“成绩、证书编号”两个数据的描绘方法与上面两个相同,最后一个证书颁发时间在图片里面没有内容,所以需要我们自定义,如下:

string strDate = dbCertificate.IssuanceTime.Value.ToString("yyyy年MM月dd日");

g.DrawString(strDate, new Font("宋体", 14), solidBrush, 340, 332);

自定义一个字符串赋值给一个变量,然后再绘制时间。

后台生成图片的整个基本流程就是这样,思路较为简单,设计到多条件查询、图片类型的转换、图片的绘制等方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值