经常下载一些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 方法推理并最终完成图片去水印修复,详情可以自行百度作进一步了解。

发表回复

后才能评论

评论(1)

  • 开心 2022年7月11日 下午5:54

    群主,能否出个简单的视频教程和解说,小白不懂原理,有些难啊
    |´・ω・)ノ

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习使用,请在下载后24小时内删除,严禁商用。若由于商用引起版权纠纷,一切责任均由使用者承担。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

不支持退款!本站为非盈利性站点,用户充值开通VIP功能或充值购买资源仅作为用户对于本站捐赠打赏行为,不充值不开通VIP同样可以通过每日签到免费获取积分的方式获取本站所有资源,本站不贩卖软件,所有内容不作为商业行为,请在捐赠打赏购买前仔细确认。