生活随笔
收集整理的這篇文章主要介紹了
java 为透明图片添加背景颜色
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java 為透明圖片添加背景顏色
需求介紹
項目需要實現在線無紙化合同簽署,調用觸屏手寫簽名生成電子合同,在生成合同過程中需要調用OCR 技術對簽署文字進行識別,在此過程中,生成的電子簽圖片背景必須是透明的(為了附著在合同上),但是OCR技術對透明圖片上文字無法識別,因此在調用OCR前需要對圖片進行處理,增加背景顏色,提高識別率。
解決方式
查閱資料發現許多同學使用 java Graphics2D 直接修改透明圖片,但是直接修改的結果是添加了背景顏色,但是不是我們需要的背景顏色,參考地址:本文的解決方式是預先生成一個白色底片,將透明圖片附在生成的白色圖片上,達到添加背景的目的,具體代碼如下:
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圖片操作異常");}}
總結
以上是生活随笔為你收集整理的java 为透明图片添加背景颜色的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。