一个去掉PDF背景水印的思路

起因

昨天测试 使用“https://github.com/VikParuchuri/marker” 将 pdf 转 Markdown的过程中,发现转换后的文件中会保护一些背景图片,是转换过程中,程序把背景图识别为了内容。于是想着怎么把背景图片去掉。

背景水印图片的特征

我这里拿到的PDF图片都是文字类型的,背景水印应该都是后期加进去的。

总结出两个特征:

  • 每页都存在相同的背景图片
  • 作为背景覆盖了页面大部分区域

基于上面的特征,写代码将背景移除

  • 代码:
import fitz

def scan_background_images(pdf_path):
    doc = fitz.open(pdf_path)
    num_pages = len(doc)
    image_usage = {}  # 字典来记录每个图片的使用情况和页面面积覆盖

    # 遍历文档中的每一页
    for page in doc:
        page_area = abs(page.rect)  # 计算页面面积
        images = page.get_images(full=True)

        for img in images:
            xref = img[0]
            img_rect = page.get_image_rects(xref)
            img_area = sum([abs(rect) for rect in img_rect])  # 计算该图片在当前页面的总覆盖面积

            if img_area / page_area >= 0.5:  # 判断是否覆盖了超过50%的页面面积
                if xref in image_usage:
                    image_usage[xref]['count'] += 1
                    image_usage[xref]['pages'].add(page.number)
                else:
                    image_usage[xref] = {'count': 1, 'pages': set([page.number])}

    # 确定在至少80%的页面上重复出现的图片
    background_images = []
    threshold = 0.8 * num_pages  # 计算至少需要出现在多少页面上

    for xref, data in image_usage.items():
        if data['count'] >= threshold:
            background_images.append(xref)

    # 移除背景图片
    for page in doc:
        for xref in background_images:
            page.clean_contents()  # 清理页面内容,准备删除操作
            page.delete_image(xref)

    # 保存修改后的PDF
    new_pdf_path = pdf_path.replace('.pdf', '_no_bg.pdf')
    doc.save(new_pdf_path)
    doc.close()

    return new_pdf_path

# 使用函数
pdf_path = "example.pdf"
new_pdf_path = scan_background_images(pdf_path)
print("Modified PDF saved to:", new_pdf_path)
  • 依赖
pip install PyMuPDF

效果

  • 去背景前
    在这里插入图片描述
  • 去背景后
    在这里插入图片描述
万能PDF水印删除工具,可以去除99.9%的PDF水印。包括注释水印、文本水印、图片水印、曲线水印、痕迹水印、路径水印、表单水印、图案水印等等 本软件是永久免费,无有效期限,无广告,无弹窗,无任何不良信息。 起初是因为用扫描王、夸克之类的app搞出来的pdf都带着logo,所以写了这个软件进行处理。发展到目前的最新版已经可以处理绝大部分pdf水印了。当然,如果进一步学习的话,你也可以用这个软件来随意修改PDF中的文本、颜色、位置、旋转、缩放等等的各种内容参数。 应用场景: 1、删除扫描全能王和夸克扫描生成的pdf中加入的logo和链接。 2、去除注释水印、文本水印、图片水印、掩码水印、曲线水印、痕迹水印、路径水印、表单水印、图案水印等等。 3、更改PDF文档结构,可用于去水印、换颜色、换文本、换位置、删权限、去签章。 PDF水印按位置分类: 1、注释水印(位于Annots) 2、内容水印(位于Contents),包括文本水印、曲线水印、路径水印、痕迹水印 3、对象水印(位于Resources),包括表单水印、图片水印、掩码水印、图案水印 软件去水印原理: 在PDF的Contents内容流或者其它位置找到绘制水印的指令,修改或者删除它们。如果看不懂内容流中的操作符,可以借助DeepSeek之类的AI工具。 使用方法看压缩包中的命令行说明
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dapeng-大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值