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 - 算法
完整视频讲解参看课程视频
讨论区