文档自动盖章

前言

最近要写一个自动生成报表的程序,具体是将一堆存储在数据库的表格作成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

相关文章
相关标签/搜索