Java - 生成健康证图片,各种模板图片

该博客介绍了一个Java程序,用于根据给定数据动态生成健康证的图片。程序通过读取模板图片,填充个人信息,如年龄、姓名、性别等,并添加头像和印章,最终保存为新的健康证图片。此方法可以有效降低手动上传健康证的工作量。
摘要由CSDN通过智能技术生成

业务中涉及到了在线的健康证预览,但是如果将每个健康证拍照上传预览的话工作量比较高,因此需要通过代码来动态的生成健康证图片,每次预览直接访问图片。

package cn.com.baidu.card.util;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;

/**
 * 生成健康证图片
 * @类 名 : CreateImage
 * @功能描述 : TODO
 * @作者信息 : 崔胖子
 * @创建时间 : 2017-9-10上午12:21:09
 * @修改备注 :
 */
public class CreateImage {

    /** 模板图片路径 */
    private static String TEMPLATEPAHT = "";

    /** 模板印章路径 */
    private static String TEMPLATEPATHYZ = "";

    static {
        // 初始化健康证图片模板路径
        TEMPLATEPAHT = "D:\\健康证.png";
        // 初始化健康证图片模板印章路径
        TEMPLATEPATHYZ = "D:\\健康证章.png";
    }

    public static void main(String[] args) {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("age", 25);
        map.put("no", "20170910001");
        map.put("name", "崔胖子");
        map.put("gender", "男");
        map.put("begin", "2017年9月10日");
        map.put("project", "小食品");
        map.put("idCode", "123456789012345678");
        createImage(map, "D:\\CBC.png");
    }

    /**
     * @Title : createImage
     * @功能描述 : TODO
     * @设定文件 : @param map 需要填充的数据集合
     * @设定文件 : @param path 文件输出的路径+文件名称
     * @设定文件 : @return
     * @返回类型 : String 文件路径
     * @throws :
     */
    public static void createImage(Map<String,Object> map, String path) {
        try{
            // 加载模板图片
            BufferedImage image = ImageIO.read(new File(TEMPLATEPAHT));
            // 得到图片操作对象
            Graphics2D graphics = image.createGraphics();
            //消除文字锯齿
            graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
            //消除图片锯齿
            graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            // 设置文字的颜色为黑色
            graphics.setColor(Color.black);
            // 设置文字的字体,大小
            graphics.setFont(new Font("宋体", Font.BOLD, 60));
            // 健康证印章
            File files = new File(TEMPLATEPATHYZ);
            // 年龄
            graphics.drawString(map.get("age") == null ? "" : map.get("age").toString(), 1620, 580);
            // 编号
            String no =  map.get("no") == null ? "" : map.get("no").toString();
            graphics.drawString("编号:"+ no, 135, 1130);
            // 姓名
            graphics.drawString(map.get("name") == null ? "" : map.get("name").toString(), 1170, 400);
            // 性别
            graphics.drawString(map.get("gender") == null ? "" : map.get("gender").toString(), 1170, 580);
            // 有效期开始时间
            graphics.drawString(map.get("begin") == null ? "" : map.get("begin").toString(), 1170, 930);
            // 经营项目
            graphics.drawString(map.get("project") == null ? "" : map.get("project").toString(), 1170, 750);
            // 身份证号
            graphics.drawString(map.get("idCode") == null ? "" : map.get("idCode").toString(), 1170, 1110);
            // 创建头像地址
            String paths = map.get("facePhoto") == null ? "D:\\健康证默认头像.png": map.get("facePhoto").toString();
            File file = new File(paths);
            // 对头像进行裁剪
            Image img = thumbnail(file, 500, 690);
            // 将头像放入模板中
            graphics.drawImage(img, 130, 130, null);
            // 对印章进行裁剪
            Image imgs = thumbnail(files, 895, 639);
            // 将印章放入模板中
            graphics.drawImage(imgs, 440, 440, null);
            // 将健康证图片存储到本地
            createImage(path, image);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 将image对象存储到本地
     * @Title : createImage
     * @功能描述 : TODO
     * @设定文件 : @param fileLocation 本地路径
     * @设定文件 : @param image 图片对象
     * @返回类型 : void
     * @throws :
     */
    private static void createImage(String fileLocation, BufferedImage image) {
        try {
            String formatName = fileLocation.substring(fileLocation.lastIndexOf(".") + 1);
            ImageIO.write(image, formatName , new File(fileLocation));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 图片压缩-按照固定宽高原图压缩
     * @Title : thumbnail
     * @功能描述 : TODO
     * @设定文件 : @param img 本地图片地址
     * @设定文件 : @param width 图片宽度
     * @设定文件 : @param height 图片高度
     * @设定文件 : @return
     * @设定文件 : @throws IOException
     * @返回类型 : Image
     * @throws :
     */
    public static Image thumbnail(File img, int width, int height) throws IOException {
        BufferedImage BI = ImageIO.read(img);
        Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);
        BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = tag.getGraphics();
        g.setColor(Color.RED);
        g.drawImage(image, 0, 0, null);
        g.dispose();
        return image;
    }

}

默认头像样式

健康证底板样式

生成后的效果

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值