经常下载一些PDF文档资料或是图片时,PDF或图片中都带有网站水印LOGO,以前要么就使用PS手动一张张改,工作量比较大,要么就找第三方工具,效率效果都只能说一般,今天教小伙伴们使用python来实现去除水印,效率效果相对来说还是非常不错的。

原理

计算机中每个像素的颜色值都是使用RGB来表示的,如[255,0,0],分别对应R(红色)255,G(绿色)0,B(蓝色)0,去水印的原理就是将水印的颜色修改成背景的颜色,从而达到去水印的目的

完整代码

# -*- coding: utf-8 -*-
# @Author: Null119
# @Desc: { 去水印 }
# @Date: 2022/02/25 19:18
from PIL import Image
from itertools import product
from fpdf import FPDF
import fitz,os,shutil

def w_pdf(pdf_file,RGBval):
    pdf = fitz.open(pdf_file);
    print('*'*50)
    if not os.path.exists('temp'):
        os.mkdir('./temp')
    for i in range(len(pdf)):
        pixmap = pdf[i].get_pixmap()
        for pos in product(range(pixmap.width), range(pixmap.height)):
            rgb = pixmap.pixel(pos[0], pos[1])
            if(sum(rgb) >= RGBval):
                pixmap.set_pixel(pos[0], pos[1], (255, 255, 255))
        pixmap.pil_save(f"./temp/%02d.png" % (i))
        print(f"第{i}张水印去除完成")

    print('开始写PDF...')
    pdf = FPDF()
    pdf.set_auto_page_break(0)
    imagelist = [i for i in os.listdir('./temp/')]
    for image in sorted(imagelist):
        pdf.add_page()
        pdf.image(os.path.join('./temp/', image), w=210, h=297)  # 宽高
    pdf.output(os.path.join('./', "去水印.pdf"), "F")
    print('去水印PDF写入完成!')
    shutil.rmtree('temp')

def w_img(image_file,RGBval):
    img = Image.open(image_file)
    width, height = img.size
    for pos in product(range(width), range(height)):
        rgb = img.getpixel(pos)[:3]
        if (sum(rgb) >= RGBval):
            img.putpixel(pos, (255, 255, 255))
    img.save('去水印.png')
    print('图片去水印完成!')

if __name__ == '__main__':
    w_pdf('test.pdf', 600)
    w_img('test.png', 600)

使用

先使用QQ截图工具查看水印RGB值

image-20220226114004683

如上图PDF水印的RGB值分别为212,212,212,那么RGBval=212+212+212,为了方便直接取整为600

例:

#参数为需要处理的PDF或图片文件名,水印RGB之和(如水印RGB分别为200,200,200,则RGBVAL=600)
w_pdf('test.pdf', 600)
w_img('test.png', 600)

实际效果

PDF去水印效果

PNG图片去水印效果

说明

由于本文主要处理的对象是PDF文档水印,背景颜色较为简单,如果你需要处理背景颜色比较复杂的图片水印,可以使用 OpenCV 来实现,它是基于标定图片噪声特征,对图片进行二值化处理,最后使用 inpaint 方法推理并最终完成图片去水印修复,详情可以自行百度作进一步了解。

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习使用,请在下载后24小时内删除,严禁商用。若由于商用引起版权纠纷,一切责任均由使用者承担。 【注意:本站发布资源来源于网络搜集,均有较强时效性,请在下载前注意查看文章资源发布或更新时间,距离当前时间太久的资源不建议下载,特别是安卓专区相关资源,会有大概率失效无法使用】