请稍候,加载中....

PDF去水印

PDF去水印项目要求:

将pdf文件中的水印去除

项目分析:

pdf去水印需要根据情况,pdf的格式,水印形式等等来确定,在本项目中由于水印的颜色与背景色可以分离,因此可以直接使用像素比较的办法来实现去水印。

项目步骤:

1. 使用imagemagick将pdf转换成图片

    imagemagick需要首先安装,安装方法:https://imagemagick.org/script/download.php
    imagemagick是一款应用很广的图片处理专用软件,具有非常强大的图片处理能力

# /usr/local/Cellar/imagemagick/7.0.8-59/bin/convert  -density 100 -trim my.pdf -quality 95 pdf/test.png

执行完毕后, 就会在pdf目录下生成以test开头的png文件,每一个文件为一个pdf中的一页

2. 读取图片,将图片中的每一个像素与水印颜色进行比较

读取图片方法有很多, 可以使用IMAGE库(pillow), PLT库(matplotlib.pyplot),cv2库(opencv2),这些方法读取图片之后,得到的是由numpy数组组成的像素矩阵
         

       

[1.        , 1.        , 1.        , 1.        ],
        [1.        , 1.        , 1.        , 1.        ],
        [1.        , 1.        , 1.        , 1.        ],
        [0.972549  , 0.972549  , 0.972549  , 1.        ],
        [0.9529412 , 0.9529412 , 0.9529412 , 1.        ],
        [0.9529412 , 0.9529412 , 0.9529412 , 1.        ],
        [0.9647059 , 0.9647059 , 0.9647059 , 1.        ],
        [0.99607843, 0.99607843, 0.99607843, 1.        ],
        [1.        , 1.        , 1.        , 1.        ]]], dtype=float32)

          水印的像素色彩: [0.7, 0.3, 0.3, 0.3, 1],将其他颜色与此比较,相近者使用白色填充

3. 处理所有图片后,将图片拼接成pdf文档

# /usr/local/Cellar/imagemagick/7.0.8-59/bin/convert pdf-nomask/* new.pdf

 

4. cv2.inpaint方法

由于使用固定的背景色替代原来的水印,会导致黑色背景部分区域色差比较明显,解决办法可以使用该像素临近点的色彩值进行替代,cv2的inpaint提供了色彩替代算法

cv2.inpaint(im , mask, radius, cv2.INPAINT_NS)
  • im - 原图
  • mask - 原图提取的水印
  • radius - 相邻半径大小
  • cv2.INPAINT_NS - 算法

完整视频讲解参看课程视频


Python学习手册-