• 文档自动盖章


    前言

    最近要写一个自动生成报表的程序,具体是将一堆存储在数据库的表格做成PDF然后盖上单位的章,章是以图片的形式给出的。
    项目用的是JAVA语言,需要的库主要是itex。查了一轮itex的API之后大概有两种做法:

    • 一种是直接以图片的形式将章插入到pdf相应位置,然后设置图片为背景,这种方法的好处是非常简单,但是后来的文字会覆盖
      掉章的内容,严重的失真。
    • 第二种方法是通过mask来对插入到pdf的图片进行处理,itex有个方法叫img.setImageMask(mask),使用了该方法之后就可以通过mask的值
      来对img设置透明度,具体是mask为0的点img会变成透明,反之亦然。

    具体方法

    通过上面的介绍我们就把问题转化到老本行数字图像处理上来了,就是提取出图片的二值化信息。
    装好Python和Opencv开始干活。

    初始图片是这样的:

    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)
    
    

    这样就获得了二值化的签章。

    然后在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);
    
    

    这样就完成了签章的生成

    总结

    具体做起来还是比较顺利的,因为签章本来就需要很清楚,如果是其他东西可能需要腐蚀、膨胀甚至上watershed算法。
    Java端也很顺利,照着API做一次就成了,很开心。

  • 相关阅读:
    MongoDB 副本集搭建 & 副本集扩容
    MongoDB 部署 & 基础命令
    MyBatis常见面试题:#{}和${}的区别是什么?
    MyBatis常见面试题:说说MyBatis的工作原理
    Java四种引用类型回收时机介绍
    Java虚拟机之垃圾回收器
    Servlet中过滤器、监听器和拦截器的区别
    Java里一个线程两次调用start()方法会出现什么情况
    二叉树、二叉查找树、平衡树和红黑树概念及其性质
    转:基于Redis实现延时队列
  • 原文地址:https://www.cnblogs.com/liujshi/p/5826936.html
Copyright © 2020-2023  润新知