后台生成图片

(作者:杨先金;撰写时间:2019年4月23日)
以生成证书为例,讲解一下如何实现在后台生成证书图片。
1、首先是证书数据的绑定:
定义一个Certifkicate()的方法,将获取到的选中行的数据一一进行绑定,为后续的生成图片做好准备工作。
在这里插入图片描述
2、然后是生成证书(单条&批量新增证书表数据):
获取选中行,判断是否选中数据,如果选中数据的长度小于或等于0,那么弹出提示框"请选择需要生成证书的成绩信息!",否则定义一个空的变量AchievementIDs来接收数据,for循环选中行的长度,并把选中行的每一个AchievementID用“;”拼接起来,变量AchievementIDs += checkStatus.data[i].AchievementID + “;”;
使用substring()方法去掉最后的一个“;”,然后打开询问提示框,询问用户"确定要为选中的数据生成证书吗?",确定之后关闭提示框,到控制器请求数据;
如果请求到的数据的状态为true,那么刷新表格,提示用户"总共选择" + AchievementIDs.Length + “条数据,其中新增成功” + successCount + “条数据,有” + oldCount + “条数据已经有证书”;否则提示用户"参数为空!“或者"数据异常”。
在这里插入图片描述
3、最后生成图片:
获取证书信息表选中行数据,判断当前是否只选择一条数据,如果为多条数据,提示用户"只能选择一条数据生成图片",如果为0条,则输出"请选择一条数据生成图片";
当只选中一条数据的情况,获取证书的ID,根据此ID到控制器生成图片,成功后打开一个新的页面。
在这里插入图片描述
根据证书ID查询证书信息,接下来就是绘制图片,在此之前,我们先要引用一下“System.Drawing”,因为我们需要用到它里面的一些静态类方法,比如Bitmap、Graphics和SolidBrush。
Bitmap:是用于处理由像素数据定义的图像的对象;Graphics:封装一个 GDI+ 绘图图面;SolidBrush:定义单色画笔,画笔用于填充图形形状,如矩形、椭圆、扇形、多边形和封闭路径。
生成图片的主要步骤:获取空白证书的物理地址,将图片转化为位图(栅格图),封装一个绘画图面,定义单色的画笔,在绘画图面写上“考生姓名”、“考试时间”,绘制成绩,绘制证书编号,绘制证书时间,具体代码如下图所示;
在这里插入图片描述
将图像以jpeg的格式保存到流中,以byte类型输出,最后返回一个文件,文件类型为@“image/jpeg”。
4、最终的效果图如下:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
下面是一个示例代码,可以让你在Spring Boot中接收图片: ```java @RestController public class ImageController { @PostMapping("/uploadImage") public String uploadImage(@RequestParam("file") MultipartFile file) { try { // 获取文件名 String fileName = StringUtils.cleanPath(file.getOriginalFilename()); // 保存文件到本地 String uploadDir = "images/"; FileUploadUtil.saveFile(uploadDir, fileName, file); return "File uploaded successfully!"; } catch (IOException ex) { return "Error uploading file."; } } } ``` 在这个示例代码中,我们定义了一个POST请求,用于接收MultipartFile类型的文件。在方法体内,我们通过StringUtils.cleanPath()方法获取文件名,并将文件保存到本地。我们使用了一个FileUploadUtil类来实现文件上传的功能,这个类的代码如下: ```java public class FileUploadUtil { public static void saveFile(String uploadDir, String fileName, MultipartFile multipartFile) throws IOException { Path uploadPath = Paths.get(uploadDir); if (!Files.exists(uploadPath)) { Files.createDirectories(uploadPath); } try (InputStream inputStream = multipartFile.getInputStream()) { Path filePath = uploadPath.resolve(fileName); Files.copy(inputStream, filePath, StandardCopyOption.REPLACE_EXISTING); } catch (IOException ioe) { throw new IOException("Could not save image file: " + fileName, ioe); } } } ``` 这个类的作用就是将文件保存到指定的目录中。我们首先创建了一个Path对象来表示上传目录,然后检查目录是否存在。如果目录不存在,我们就调用Files.createDirectories()方法来创建目录。接下来,我们通过multipartFile.getInputStream()方法获取文件的输入流,然后创建一个Path对象来表示文件路径,并调用Files.copy()方法将文件保存到该路径中。如果保存文件时出现了错误,我们就抛出一个IOException异常。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值