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

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;
    }

}

默认头像样式

健康证底板样式

生成后的效果

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐