文檔自動蓋章

前言

最近要寫一個自動生成報表的程序,具體是將一堆存儲在數據庫的表格作成PDF而後蓋上單位的章,章是以圖片的形式給出的。
項目用的是JAVA語言,須要的庫主要是itex。查了一輪itex的API以後大概有兩種作法:算法

  • 一種是直接以圖片的形式將章插入到pdf相應位置,而後設置圖片爲背景,這種方法的好處是很是簡單,可是後來的文字會覆蓋
    掉章的內容,嚴重的失真。
  • 第二種方法是經過mask來對插入到pdf的圖片進行處理,itex有個方法叫img.setImageMask(mask),使用了該方法以後就能夠經過mask的值
    來對img設置透明度,具體是mask爲0的點img會變成透明,反之亦然。

具體方法

經過上面的介紹咱們就把問題轉化到老本行數字圖像處理上來了,就是提取出圖片的二值化信息。
裝好Python和Opencv開始幹活。數據庫

初始圖片是這樣的:
code

import numpy as np
import cv2

I = cv2.imread('t1.jpg');

I_gray = cv2.cvtColor(I, CV_BGR2GRAY) #轉成灰度圖片

I_gray[I_gray > 220] = 255

I_gray[I_gray < 220] = 0  #獲得二值化的圖片,220是實驗出來的

cv2.imwrite('t1_bin.png', I_gray)

這樣就得到了二值化的簽章。blog

而後在Java端處理圖片

Image img = Image.getInstance("E:\\t1.jpg");
BufferedImage bi = ImageIO.read(new File("E:\\t1_bin.jpg"));
BufferedImage newBi = new BufferedImage(bi.getWidth(),bi.getHeight(),BufferedImage.TYPE_BYTE_BINARY);
newBi.getGraphics().drawImage(bi, 0, 0, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(newBi, "png", baos);
Image mask = Image.getInstance(baos.toByteArray());
mask.makeMask();
img.setImageMask(mask);

這樣就完成了簽章的生成
get

總結

具體作起來仍是比較順利的,由於簽章原本就須要很清楚,若是是其餘東西可能須要腐蝕、膨脹甚至上watershed算法。
Java端也很順利,照着API作一次就成了,很開心。it

相關文章
相關標籤/搜索