原始需求:

用户分别上传身份证正反面照片,后台合并成一张照片或一个pdf文件;

为方便业务扩展,可支持多张照片合并:

方式1:多图合成一张图片

package com.solar.common.util;import java.awt.image.BufferedImage;
import java.io.File;
import java.util.List;
import javax.imageio.ImageIO;
import org.springframework.util.Assert;public class Test {/*** 合并图片* @Title:merge* @date 2022年12月12日 上午9:59:33* @author yqwang* @param files 源图* @param distPath 合并后图片存放位置*/public static void merge(List<File> files, String distPath) {Assert.notEmpty(files,"源图参数不能为空。");Assert.isTrue(files.size()>=2,"源图不得少于2张。");int dstHeight = 0;int dstWidth = 0;// 获取需要拼接的图片长度int len = files.size();// 判断长度是否大于0BufferedImage[] images = new BufferedImage[len];int[][] ImageArrays = new int[len][];for (int i = 0; i < len; i++) {try {Assert.isTrue(files.get(i)!=null,"图片文件为空");images[i] = ImageIO.read(files.get(i));int width = images[i].getWidth();int height = images[i].getHeight();Assert.isTrue(width>=1,"源图高度太小。");Assert.isTrue(height>=1,"源图宽度太小。");// 从图片中读取RGB 像素ImageArrays[i] = new int[width * height];ImageArrays[i] = images[i].getRGB(0, 0, width, height, ImageArrays[i], 0, width);// 计算合并的宽度和高度dstWidth = dstWidth > width ? dstWidth : width;dstHeight += height;} catch (Exception e) {e.printStackTrace();Assert.isTrue(false,"读取图片信息失败:"+e.getMessage());}}// 合成图片像素//System.out.println("宽度:" + dstWidth);//System.out.println("高度:" + dstHeight);// 生成新图片try {BufferedImage imageNew = new BufferedImage(dstWidth, dstHeight, BufferedImage.TYPE_INT_RGB);int height_i = 0;for (int i = 0; i < images.length; i++) {int width = images[i].getWidth();int height = images[i].getHeight();imageNew.setRGB(0, height_i, width, height, ImageArrays[i], 0, width);height_i += height;}File outFile = new File(distPath);// 写图片,输出到硬盘ImageIO.write(imageNew, "jpg", outFile);} catch (Exception e) {e.printStackTrace();Assert.isTrue(false,e.getMessage());} }}

方式2:多图合成一个pdf文件

需要使用包itextpdf

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>xxxxxxx</version></dependency>
package com.solar.common.util;import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import org.springframework.util.Assert;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.solar.util.FileHelper;
import com.solar.util.ListUtil;public class Test {private final static List<String> imgFileTypes=ListUtil.split("bmp,jpg,jpeg,gif,png", ","); /*** 多个图片生成pdf文件* @Title:buildPdfByImgs* @Description: TODO * @date 2022年12月12日 下午2:27:40* @author yqwang* @param imgs 图片文件列表* @param distPath 目标路径* @throws Exception*/public static void buildPdfByImgs(List<File> imgs,String distPath) throws Exception{// 1:创建一个document对象。Document document = new Document();try {// 2创建一个PdfWriter实例,PdfWriter.getInstance(document, new FileOutputStream(new File(distPath)));// 3:打开文档。document.open();// 4:在文档中增加图片。document.setPageSize(PageSize.A4);String ext;Image img;for (File file : imgs) {ext = FileHelper.getFileExtName(file.getName());//只管图片文件if(!imgFileTypes.contains(ext.toLowerCase())){continue;}//document.newPage(); 如果每张图片要放独立的一页,这需要每次newPage()img = Image.getInstance(FileHelper.readFileToByteArray(file));//img = Image.getInstance(filePath);可以使用路径方式读取图像文件img.setAlignment(Image.ALIGN_CENTER);//可能需要将图像缩放到一定百分比。Float wPercent = PageSize.A4.getWidth()/img.getWidth();Float hPercent = PageSize.A4.getHeight()/img.getHeight();if(wPercent<1 || hPercent<1){img.scalePercent(Math.min(wPercent, hPercent)*100);}else{img.scalePercent(100);}//在文档中增加图片document.add(img);}} catch (Exception e) {e.printStackTrace();Assert.isTrue(false,e.getMessage());}finally{try {document.close();} catch (Exception e) {}}}
}

多个图片合并生成1个图片或1个pdf相关推荐

  1. 【Python小工具】若干图片合并生成动态图(.gif)

    相信很多学生党.上班族在日常的学习.科研.办公中总会有一些比较特殊的需求,本人作为一个理工科(非计算机相关专业)学生和大家一样.有时好不容易找到了比较心仪的工具,却发现还要收费,质量和使用的便捷性也不 ...

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

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

  3. eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等...

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...

  4. html5自动打印图片,html2canvas生成清晰的图片实现打印代码示例

    本篇文章小编给大家分享一下html2canvas生成清晰的图片实现打印代码示例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 基本用法 处理模糊问题 细节问题-压缩base ...

  5. java 生成证书图片_java生成自定义证书图片1 - 制作证书word模板

    最近做项目遇到一个需求,生成指定数据的证书图片(比如毕业证,在空的模板中输入自定义的姓名.日期等信息),尝试了许多方法,最终完美地实现了这个需求. 以下内容为制作证书图片的第一步,制作证书word模板 ...

  6. java 生成证书图片_java生成自定义证书图片4

    终于到了生成自定义证书图片的最后一步,pdf转图片我选择使用pdfbox库,以下是工具类: packagecom.x.certificate.pdf;importjava.awt.image.Buff ...

  7. php随机生成验证图片,php 生成随机验证码图片代码

    /** 默认首页 **/ class DefaultController extends AppController { public function index() { $len = 5; $st ...

  8. 根据一个大图片自动生成相应小图片的代码

    我的一个项目中用的 using System; using System.IO; using System.Drawing; namespace Compoment {     /**//// < ...

  9. php 图片合成gif,php合并图片,生成gif动态图片,保存到指定目录

    php合并图片,生成gif动态图片,保存到指定目录 1. PHP代码/* 图片合并需要 1 下载 php_imagick_st-Q8.dll 并将其放入 php/ext/ 2 在php.ini 中加入 ...

最新文章

  1. Android之一起玩转下拉刷新控件
  2. Ubuntu下apt-get命令详解
  3. SAP: 如何取物料主数据的特性值
  4. 多线程编程有什么用途_为什么建议你一定要学懂C++
  5. qt 中如何检测是否按下键盘(很实用)
  6. 洛谷P2320 [HNOI2006]鬼谷子的钱袋
  7. struts2框架之文件下载(参考第三天学习笔记)
  8. Python计算今年第n个周m是几月几号
  9. 字符串用法大全(源码解析,建议收藏!)
  10. ActionSheet的用法
  11. 51单片机基础入门教程(精华版)文末有惊喜
  12. 二元关系:(自反,对称,传递)关系的求逆与闭包
  13. es6 箭头函数 模板字符串 点点点运算符
  14. 把QUERY的输出结果作为数据源_小七_新浪博客
  15. T2691 桶哥的问题——送桶
  16. 基于eigen实现matlab hamming hann blakman 窗函数的实现
  17. 2022-11 | Redis命令SET SETEX SETNX语法及描述
  18. 突然集体涨价的背后 共享充电宝未来会走向何方?
  19. Recovering a NOARCHIVELOG Database with Incremental Backups
  20. 如何提取复杂多引脚芯片的引脚编号及引脚名称

热门文章

  1. IIC软件协议及硬件知识汇总
  2. php discuz 顶,discuz模拟登录实现自动顶帖php程序 - Discuz
  3. Python网络爬虫与信息提取(14)—— 百度搜索关键字爬取并整理摘要、标题、关键字等
  4. win7镜像下载和安装vm教程
  5. 点阵图、光栅图、位图,向量图
  6. 中国非接触温度传感器市场现状研究分析与发展前景预测报告(2022)
  7. 高校物联网实训室-实验室建设方案
  8. Epicor中的时间格式转换 - How to convert time from string to time format
  9. 【选址问题】二进制灰狼算法解决无容量选址问题【Matlab】
  10. matlab生成计算软件,利用Matlab从第一性原理计算软件Siesta读取和生成能带图