java 为透明图片添加背景颜色

java 为透明图片添加背景颜色

需求介绍

项目需要实现在线无纸化合同签署,调用触屏手写签名生成电子合同,在生成合同过程中需要调用OCR 技术对签署文字进行识别,在此过程中,生成的电子签图片背景必须是透明的(为了附着在合同上),但是OCR技术对透明图片上文字无法识别,因此在调用OCR前需要对图片进行处理,增加背景颜色,提高识别率。

解决方式

  1. 查阅资料发现许多同学使用 java Graphics2D 直接修改透明图片,但是直接修改的结果是添加了背景颜色,但是不是我们需要的背景颜色,参考地址:
  2. 本文的解决方式是预先生成一个白色底片,将透明图片附在生成的白色图片上,达到添加背景的目的,具体代码如下:
	/**
     * 前端传递的参数为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);
            //  log.info(string);
            // 调用ocr服务
            // sendOcr(string);
        } catch (IOException e) {
            log.error("对ocr图片操作异常", e);
            throw new ServiceException("对ocr图片操作异常");
        }
    }
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的输出窗口中添加背景图片可以通过以下步骤实现: 1. 创建一个JFrame窗口对象,用于显示输出内容和背景图片。 2. 在JFrame窗口中添加一个JPanel面板,用于放置输出内容和背景图片。 3. 将JPanel面板设置为透明,这样才能看到背景图片。 4. 在JPanel面板中添加一个JLabel标签,用于显示背景图片。 5. 使用ImageIcon类加载背景图片,并将其设置为JLabel标签的图标。 6. 将输出内容添加到JPanel面板中,可以使用JTextArea或JScrollPane等组件。 下面是一个简单的示例代码: ``` import java.awt.*; import javax.swing.*; public class BackgroundImageExample extends JFrame { public BackgroundImageExample() { JPanel panel = new JPanel(); panel.setOpaque(false); // 设置面板为透明 JLabel background = new JLabel(new ImageIcon("background.jpg")); // 加载背景图片 background.setBounds(0, 0, getWidth(), getHeight()); // 设置背景图片大小 panel.add(background); // 将背景图片添加到面板中 JTextArea content = new JTextArea("Hello World!"); // 输出内容 content.setForeground(Color.WHITE); // 设置字体颜色为白色 content.setOpaque(false); // 将文本框设置为透明 panel.add(content); // 将文本框添加到面板中 add(panel); // 将面板添加到窗口中 setSize(500, 400); // 设置窗口大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口关闭方式 setLocationRelativeTo(null); // 窗口居中显示 setVisible(true); // 显示窗口 } public static void main(String[] args) { new BackgroundImageExample(); } } ``` 在这个示例中,我们创建了一个JFrame窗口对象,并在窗口中添加了一个JPanel面板和一个JLabel标签。我们使用setOpaque方法将面板设置为透明,并使用ImageIcon类加载了一张名为"background.jpg"的背景图片,并将其设置为JLabel标签的图标。最后,我们将输出内容添加到面板中,设置了文本框的字体颜色和透明度,并将面板添加到了窗口中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值