背景:商城要做活动,要生成商户的活动二维码,现在有了活动的底图模板,商户上传自己的二维码就可以生成活动图。可以上传压缩包,也可以上传单个图。

转换工具类

public class ImageUtils {private Logger logger = LoggerFactory.getLogger(ImageUtils.class);private static Map<String, String>  exitFile = new HashMap<>();/*** 处理 图片二维码,写入流** @param file* @param zos* @throws Exception*/public void mergeImg(MultipartFile file, ZipOutputStream zos) throws Exception {String name = file.getOriginalFilename();String format = name.substring(name.lastIndexOf(".") + 1);// 如果文件已存在就更改名字,不然putNextEntry 会报错while (exitFile.containsKey(name)) {String fileName = name.substring(0, name.lastIndexOf("."));name = fileName + "-1." + format;}zos.putNextEntry(new ZipEntry(name));exitFile.put(name, name);InputStream temIs =     this.getClass().getResourceAsStream("/template/template1.jpg");BufferedImage code = ImageIO.read(file.getInputStream());int width = code.getWidth();int heigth = code.getHeight();BufferedImage b = ImageIO.read(temIs);Graphics2D g = b.createGraphics();g.drawImage(code, 500, 1100, width, heigth, null);g.dispose();ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(b, format, os);zos.write(os.toByteArray());temIs.close();}/*** 处理压缩包内的图片,写入流** @param file* @param zos*/public void mergeZip(MultipartFile file, ZipOutputStream zos) {try {File zip = FileUtils.transferToFile(file);ZipFile zf = new ZipFile(zip, Charset.forName("GBK"));Enumeration<? extends ZipEntry> iter = zf.entries();while (iter.hasMoreElements()) {ZipEntry entry = iter.nextElement();String name = entry.getName();String format = name.substring(name.lastIndexOf(".") + 1);// 如果文件已存在就更改名字,不然putNextEntry 会报错while (exitFile.containsKey(name)) {String fileName = name.substring(0, name.lastIndexOf("."));name = fileName + "-1." + format;}zos.putNextEntry(new ZipEntry(name));exitFile.put(name, name);InputStream ins = zf.getInputStream(entry);BufferedImage codeBi = ImageIO.read(ins);int cw = codeBi.getWidth();int ch = codeBi.getHeight();InputStream temIs = this.getClass().getResourceAsStream("/template/template1.jpg");BufferedImage b = ImageIO.read(temIs);Graphics2D g = b.createGraphics();g.drawImage(codeBi, 500, 1100, cw, ch, null);g.dispose();ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(b, format, os);zos.write(os.toByteArray());os.close();temIs.close();ins.close();}} catch (Exception e) {e.printStackTrace();}}public void flushExitFileMap() {exitFile.clear();}
}
MultipartFile 转 FIle
public static File transferToFile(MultipartFile multipartFile) {
//        选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。File file = null;try {String originalFilename = multipartFile.getOriginalFilename();String[] filename = originalFilename.split("\\.");file = File.createTempFile(filename[0], filename[1]);multipartFile.transferTo(file);file.deleteOnExit();} catch (IOException e) {e.printStackTrace();}return file;}

service 调用

public void qrcode(MultipartFile[] files, HttpServletResponse response) {try {if (files != null && files.length > 0) {ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());ImageUtils utils = new ImageUtils();utils.flushExitFileMap();for (MultipartFile file : files) {String name = file.getOriginalFilename();String format = name.substring(name.lastIndexOf(".") + 1);if ("jpg".equalsIgnoreCase(format) || "png".equalsIgnoreCase(format) || "jpeg".equalsIgnoreCase(format)) {utils.mergeImg(file, zos);} else if ("zip".equalsIgnoreCase(format)) {utils.mergeZip(file, zos);}}zos.closeEntry();zos.close();}} catch (Exception e) {e.printStackTrace();}}

controller

@PostMapping(value = "/qrcode")
public void qrcode(@RequestParam("files") MultipartFile[] files, HttpServletResponse response) throws UnsupportedEncodingException {String fileName = URLEncoder.encode("商户活动码牌.zip", "UTF-8");response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);response.setHeader("Content-disposition", "attachment;filename=" + fileName);imageService.qrcode(files, response);}

springboot 实现图片合并相关推荐

  1. 两个pdf怎么打开成两个窗口_如何将图片合并成PDF?教你两个免费方法

    我们都知道图片只能一张张查看,如果数量较多就比较麻烦了,所以经常会将图片合并转成PDF文件更方便.那么分享两个免费图片转PDF的方法给大家. 方法1:PDF编辑器合并 其实PDF编辑器除了编辑PDF格 ...

  2. 如何查看文件夹里有几张图片_如何把几张图片合成一个pdf?图片合并为pdf的操作教程...

    我在一家公司当美工,平时要接触到很多图片素材,并把它们以pdf格式文件的形式发送给客户查看(以此来摸索出客户想要的图片效果).把几张图片合并成为一个pdf文件,即是将图片格式转换成为pdf格式,这对我 ...

  3. Vb.Net实现图片合并(相框效果)

    Vb.Net实现图片合并(相框效果) Imports System.Drawing Imports System.Drawing.Imaging Imports System.Drawing.Draw ...

  4. java 图片合并_Java如何实现图片的叠加与拼接操作

    关于Java实现图片的叠加与拼接的文章网络上确实很多,碰巧小编开发工作中也遇到这些问题,就做了简要的梳理,作为笔记以备不时之需. Java对图片的处理主要使用的是BufferedImage类. Buf ...

  5. Latex中将多个eps图片合并成一幅eps的代码和方法

    Latex中将多个eps图片合并成一幅eps的代码和方法 在SCI论文最后上传时,有时需要将多个eps小图合并成一幅eps图,这里讲一下完整的操作流程和相应代码,十分简单. STEP 1. 把下面代码 ...

  6. springboot传图片到前端之有手就行

    springboot传图片到前端之有手就行 其实想要实现springboot传图片到前端是一件非常容易实现的,但是网上太多弄得花里胡哨,让人摸不清头脑: 实现springboot传图片到前端第一步(找 ...

  7. SpringBoot将图片/文件传至前端

    SpringBoot将图片/文件传至前端 1. 返回OutputStream 2. 返回base64格式 1. 返回OutputStream @GetMapping("/download&q ...

  8. python多图片合并pdf_Python结合ImageMagick实现多张图片合并为一个pdf文件的方法

    本文实例讲述了Python结合ImageMagick实现多张图片合并为一个pdf文件的方法.分享给大家供大家参考,具体如下: 前段时间买了不少书,现在手头的书籍积累的越来越多,北京这边租住的小屋子空间 ...

  9. css图片横向压缩,【css样式生成 图片合并压缩工具】Sprite,你值得拥有

    好久好久没有更新博客了,越来越懒...话说懒也有懒的好处,懒的时候你可能会想着用些神马方法来帮你偷懒.没错,下面就给大家介绍个博主前不久开发的[css样式生成 & 图片合并压缩工具]Spirt ...

  10. php九宫格图片合成,php实现微信中的图片合并-九宫格图片

    $pic_path ) { $kk = $k + 1; if ( in_array($kk, $lineArr) ) { $start_x = $line_x; $start_y = $start_y ...

最新文章

  1. [DB那些事]数据库加密
  2. linux 文本搜索命令 grep egrep fgrep 区别
  3. DCMTK:OFvariant的单元测试
  4. 雨中冒险:难度随时间增高的设计
  5. 使用ndk standalone工具链来编译某个平台下的库
  6. C# File类的操作
  7. java 蓝桥杯算法训练 求1加到x的和(number)
  8. 关于WS-PSNR、S-PSNR、CPP-PSNR
  9. SpringCloud工作笔记077---SpringBoot中使用JPA操作数据库
  10. spring Boot 学习(一、Spring Boot与缓存)
  11. java中定义存放汉字的数组_Java中如何存储汉字
  12. 「数据新星」Databricks 崛起启示录
  13. 联想服务器linux系统raid驱动,ThinkSystem服务器RAID 530/930系列阵列卡驱动及安装RHEL7.3要点说明...
  14. java retrofit_Android开发Retrofit2+Rxjava2+okHttp 网络框架封装
  15. html模拟点击某个键盘按钮,如何使用JavaScript模拟按键或单击?
  16. 神舟zx8sp7s2装linux,战神ZX8-SP7S2游戏本搭GTX1070+桌面i7芯
  17. 传说之下三重审判用计算机怎么弹,传说之下三重审判模拟器
  18. Object.assign()方法
  19. 第30关 判断回文数
  20. phpunit 远程代码执行漏洞(CVE-2017-9841)复现

热门文章

  1. 硕士毕业论文页眉页脚页码设置
  2. 第三届算法设计与编程挑战赛(冬季赛)G题
  3. 企业微信服务号注册认证支付接入流程
  4. Honeywell全系列打印机驱动interdriver 2019.M-3
  5. 洛谷 U80341 想去玩的Seaway
  6. 用devc++表白_【吉利表白墙】19级倪yl,风吹起如花般破碎的流年,而你的笑容摇晃摇晃,成为我命途中最美的点缀...
  7. 外贸ERP软件之工贸一体企业解决方案
  8. 股票python量化交易026-数据回测的概念以及现有框架
  9. 保研夏令营/预推免联系老师邮件模板
  10. Blender建模(三)