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 ...
随机推荐
- 【.net core】电商平台升级之微服务架构应用实战
一.前言 这篇文章本来是继续分享IdentityServer4 的相关文章,由于之前有博友问我关于微服务相关的问题,我就先跳过IdentityServer4的分享,进行微服务相关的技术学习和分享.微服 ...
- 将python的字典格式数据写入excei表中
上面的为最终结果 import requests import re import xlwt import json # 导入必须的包: xlwt,json,requests,re. headers ...
- js随机背景色 并显示色号
今天重新看了一般原生js教程,看到一个例子 是点击按钮改变背景色. 我就改进了一下 点击按钮换一个颜色 并把色号给显示出来 <!DOCTYPE html><html><h ...
- Spring解决循环依赖,你真的懂了吗?
导读 前几天发表的文章SpringBoot多数据源动态切换和SpringBoot整合多数据源的巨坑中,提到了一个坑就是动态数据源添加@Primary接口就会造成循环依赖异常,如下图: 这个就是典型的构 ...
- kerberos系列之kerberos安装
最近搞了一下kerberos,准备写一个系列,介绍kerberos的安装,和常用组件kerberos配置,今天进入第一篇:kerberOS安装 具体kerberos是什么东西,大家可以百度查一下,这里 ...
- Jasper报表 自动序列号
添加表达式:$V{REPORT_COUNT}.toString()
- 基于Jquery WeUI的微信开发H5页面控件的经验总结(2)
在微信开发H5页面的时候,往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发,由于本人喜欢在Asp.net的Web界面上使用JQuery,因此比较倾向于使用 jQuery WeUI ...
- CSS三角形/气泡的实现原理及应用
记得第一次面试,面试官问如何用css实现一个不规则三角形?好叭 ·-·,触及到知识盲区了,手动叹气(╥﹏╥),好在别的回答的还好,没挂
- Centos 8 安装 Consul-Template
1. 下载安装包( consul-template_0.23.0_linux_amd64.zip 文件 ) 下载地址: https://releases.hashicorp.com/consul-te ...
- coding++:TimeUnit 使用
TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段 主要作用 时间颗粒度转换 延时 常用的颗粒度 TimeUnit.DAYS //天 TimeUnit. ...