java 根据图片文字动态生成图片
今天在做热敏打印机打印二维码,并有文字描述,想到的简单的方法就是根据热敏打印机的纸张宽度和高度,生成对应的图片,如下:
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
*/
@Slf4j
public 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)
@SpringBootTest
public 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 根据图片文字动态生成图片的更多相关文章
- JAVA的图片文字识别技术
从2013年的记录看,JAVA中图片文字识别技术大部分采用ORC的tesseract的软件功能,后来渐渐开放了java-api调用接口. 图片文字识别技术,还是采用训练的方法.并未从根本上解决图片与文 ...
- java实现图片文字识别的两种方法
一.使用tesseract-ocr 1. https://github.com/tesseract-ocr/tesseract/wiki上下载安装包安装和简体中文训练文件 window64位安装 ...
- java根据图片和文字生成自定义图片
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; i ...
- 【图片识别】java 图片文字识别 ocr (转)
http://www.cnblogs.com/inkflower/p/6642264.html 最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为 ...
- 【图片识别】Java中使用tess4J进行图片文字识别(支持中文)(转)
http://blog.csdn.net/wsk1103/article/details/54173282 java中识别文字比较简单,使用的软件是tesseractocr(使用的版本是3.02,3以 ...
- Java利用poi生成word(包含插入图片,动态表格,行合并)
转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...
- java 图片文字识别 ocr
最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为java使用的demo 在此之前,使用这个工具需要在本地安装OCR工具: 下面一个是一定要安装的 ...
- Java中图片压缩处理
原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...
- Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种
http://blog.csdn.net/yanzi1225627/article/details/8633872 第二种方法也要新建一个图片+文字的xml布局文件,然后写一个类继承自LinearLa ...
随机推荐
- 用反射机制和pandas,实现excel数据的读取以及参数化${arg}的赋值
反射类:class GetData: index = pd.read_excel(file_name, sheet_name).loc[0, ['index']].values[0] email = ...
- 简说Python之图形初体验
针对孩子,最容易引起小孩的感官认知的就是图形.因此,系统运用图形编程,可以更好地让孩子喜欢上编程. turtle叫做,Turtle graphics.是python第三方的画图模块工具.可以通过imp ...
- 代号为 Kyria 的 Manjaro Linux 19.0 系统正式发布
Xfce版本仍然是主打,此版本Xfce更新到4.14,并且主要致力于在桌面和窗口管理器上完善用户体验. KDE版本提供了功能强大.成熟且丰富的Plasma 5.17桌面环境,此版本进行了完全重新设计. ...
- 求你了,别再说Java对象都是在堆内存上分配空间的了!
Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解.可以说,关于JVM的相关知识,基本是每个Java开发者 ...
- JavaScript每日学习日记(1)
8.11.2019 1. lastIndexOf() 方法从尾到头进行检索. 2. 有三种提取部分字符串的方法: 2.1 slice(start, end) 如果某个参数为负,则从字符串的结尾开始计 ...
- Ubuntu的BEEP去哪里了?
一直知道ubuntu的beep不响应了,但是一直都没太关注过它怎么了. 今天关注了一下,发现网上都是在问怎么关掉它的,时间还是在07年左右. 搜索到了一些帖子,有一些是说没有找到恢复的方法,还有一些, ...
- springcloud基础-eureka(注册中心)案例
一.新建项目,取名eureka-server pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- 灵感来袭,基于Redis的分布式延迟队列
延迟队列 延迟队列,也就是一定时间之后将消息体放入队列,然后消费者才能正常消费.比如1分钟之后发送短信,发送邮件,检测数据状态等. Redisson Delayed Queue 如果你项目中使用了re ...
- JUC 中提供的限流利器-Semaphore(信号量)
在 JUC 包下,有一个 Semaphore 类,翻译成信号量,Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.Semaphore 跟锁 ...
- 维护你的请求队列,处理token异常
前言 网络请求是开发中最基础也是最核心的需求,封装一个稳定且可用性高的请求也显得尤为重要.通常封装的内容除了入参之外,更多的是请求中的异常处理.本文分享下我在处理 token 异常方面的做法,通过维护 ...