java 根据图片文字动态生成图片

Wesley13
• 阅读 613

今天在做热敏打印机打印二维码,并有文字描述,想到的简单的方法就是根据热敏打印机的纸张宽度和高度,生成对应的图片,如下:

package com.orisdom.utils;import lombok.extern.slf4j.Slf4j;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/** * @author chenxiaokang * @date 2019/7/8 13:48 */@Slf4jpublic class ImageBuilderUtils {    /**     *  热敏打印机纸张大约宽度(4cm*6cm)     */    private static final int width = 151;    /**     *  热敏打印机纸张大约高度(4cm*6cm)     */    private static final int height = 227;    /**     *     * @param code 编码     * @param path 二维码存放路劲     * @return 最新图片生成路径     */    public static String ImageBuilder(String code,String path) {        //得到图片缓冲区        FileInputStream fileInputStream = null;        try {            BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);            File file = new File(path);            if(!file.exists()){                throw  new BusinessException("二维码存放地址有误");            }            fileInputStream = new FileInputStream(file);            BufferedImage image2 = ImageIO.read(fileInputStream);            //得到它的绘制环境(这张图片的笔)            Graphics2D g2 = (Graphics2D) bi.getGraphics();            g2.fillRect(0, 0, width, height);            //设置颜色            g2.setColor(Color.WHITE);            // 将图片大小设置为大约4cm*4cm 具体根据纸张大小设定            g2.drawImage(image2, 10, 85, 135, 135,null);            g2.drawRect(0, 0, width - 1, height - 1);            //设置字体:字体、字号、大小            g2.setFont(new Font("黑体", Font.BOLD, 26));            //设置背景颜色            g2.setColor(Color.BLACK);            //向图片上写字符串            g2.drawString("东久", 15, 30);            g2.setFont(new Font("黑体", Font.BOLD, 20));            g2.drawString("·", 65, 28);            g2.setFont(new Font("黑体", Font.BOLD, 26));            g2.drawString("佳能", 83, 30);            g2.setFont(new Font("黑体", Font.BOLD, 18));            g2.drawString("iR-ADV C3525", 15, 60);            g2.setFont(new Font("黑体", Font.ITALIC, 14));            g2.drawString(code, 30, 80);            // 图片上传后的路径            String savePath = "D:/a.jpg";            ImageIO.write(bi, "JPEG", new FileOutputStream(savePath));            return savePath;        }catch (Exception e){            log.error("生成图片错误",e);            throw new BusinessException("生成图片错误",e);        }finally {            if(fileInputStream != null){                try {                    fileInputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}编写测试类

package com.orisdom.utils;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/** * @author chenxiaokang * @date 2019/7/8 15:39 */@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTestpublic class ImageBuilderUtilsTest {    @Test    public void imageBuilder() {        String path =  ImageBuilderUtils.ImageBuilder("NO.1132323232","D:\\toolschenxiaokang\\qrcode_for_gh_02122d6b2ea8_258.jpg");        System.out.println(path);    }}

最后生成的图片模板

java 根据图片文字动态生成图片

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
2年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Java修道之路,问鼎巅峰,我辈代码修仙法力齐天
<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这