项目需要实现在线无纸化合同签署,调用触屏手写签名生成电子合同,在生成合同过程中需要调用OCR 技术对签署文字进行识别,在此过程中,生成的电子签图片背景必须是透明的(为了附着在合同上),但是OCR技术对透明图片上文字无法识别,因此在调用OCR前需要对图片进行处理,增加背景颜色,提高识别率。
-
查阅资料发现许多同学使用 java Graphics2D 直接修改透明图片,但是直接修改的结果是添加了背景颜色,但是不是我们需要的背景颜色,
参考地址:
-
本文的解决方式是预先生成一个白色底片,将透明图片附在生成的白色图片上,达到添加背景的目的,具体代码如下:
-
* 前端传递的参数为base64编码的字符串
* @param picStr
* @return
public
void
str2Image
(
String picStr
)
{
byte
[
]
decode
=
Base64Utils
.
decode
(
picStr
)
;
InputStream in
=
new
ByteArrayInputStream
(
decode
)
;
BufferedImage srcImage
;
try
{
srcImage
=
ImageIO
.
read
(
in
)
;
changeImageBackground
(
srcImage
)
;
}
catch
(
IOException
e
)
{
log
.
error
(
"ocr 将str转化io异常:"
,
e
)
;
throw
new
ServiceException
(
"图片添加背景色异常"
)
;
public
void
changeImageBackground
(
BufferedImage srcImage
)
{
BufferedImage outImage
=
null
;
try
{
int
oldHeight
=
srcImage
.
getHeight
(
)
;
int
oldWidth
=
srcImage
.
getWidth
(
)
;
int
destWidth
=
oldWidth
*
2
;
int
destHeight
=
oldHeight
*
2
;
outImage
=
new
BufferedImage
(
destWidth
,
destHeight
,
BufferedImage
.
TYPE_INT_RGB
)
;
Graphics2D graphics2D
=
(
Graphics2D
)
outImage
.
getGraphics
(
)
;
graphics2D
.
setBackground
(
Color
.
WHITE
)
;
graphics2D
.
clearRect
(
0
,
0
,
destWidth
,
destHeight
)
;
graphics2D
.
drawImage
(
srcImage
,
(
destWidth
-
oldWidth
)
/
2
,
(
destHeight
-
oldHeight
)
/
2
,
null
)
;
graphics2D
.
dispose
(
)
;
ByteArrayOutputStream os
=
new
ByteArrayOutputStream
(
)
;
ImageIO
.
write
(
outImage
,
ConstantUtil
.
FileType
.
PNG
,
os
)
;
byte
[
]
bytes
=
os
.
toByteArray
(
)
;
String string
=
Base64Utils
.
encodeToString
(
bytes
)
;
}
catch
(
IOException
e
)
{
log
.
error
(
"对ocr图片操作异常"
,
e
)
;
throw
new
ServiceException
(
"对ocr图片操作异常"
)
;
之前在百度AI社区写的人像分割帖子,最近有一些开发者会遇到返回的
透明
图的base64存
图片
有问题,还想知道存起来的
透明
图片
如何更改
背景
色,想快速做个证件照的应用。
此文呢。就从接口返回的
透明
图片
搞起。把返回的
foreground - 人像前...
项目中遇到一个需要把
背景
图改为
透明
的需求,因为我这里
图片
可能会比较复杂所以会出现有些
背景
留着
图片
没了的问题。所以根据网络上的资源学习了一下我项目可以用的。
package file;
import
java
x.imageio.ImageIO;
import
java
x.swing.*;
import
java
.awt.*;
import
java
.awt.image.BufferedImage;
import
java
.io.*;
* 描述 The type Tm img.
* @au
作为一个完全的小白,折腾了一个星期多,才完成一张
图片
的处理,包括
添加
logo,二维码,以及
图片
的部分细节处理
期间也参考了部分资料:https://www.cnblogs.com/xiaoduilantian/p/9206170.html
https://blog.csdn.net/jzshmyt/article/details/8364408
https://blog.csdn.ne...
package test;
import
java
.awt.AlphaComposite;import
java
.awt.Color;import
java
.awt.Font;import
java
.awt.Graphics2D;import
java
.awt.image.BufferedImage;import
java
.io.File;
import
java
x.imageio.Image...
package test;
import
java
.awt.AlphaComposite;import
java
.awt.Color;import
java
.awt.Font;import
java
.awt.Graphics2D;import
java
.awt.image.BufferedImage;import
java
.io.File;
import
java
x.imageio.Image...
public static void pressText2(String sourceImg,String targetImg) {
try {
File file = new File(sourceImg);
File targetfile = new File(t...
package com.goldgrid.socket.client;
import
java
.awt.Graphics2D;import
java
.awt.Image;import
java
.awt.image.BufferedImage;import
java
.io.ByteArrayOutputStream;import
java
.io.File;
import
java
x.imagei...