吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 708|回复: 6
收起左侧

[Python 原创] python去除非页眉页脚,非背景非正式的图片、文字水印代码

[复制链接]
threettiger 发表于 2024-8-8 17:57
去除某目录下所有pdf的图片,文字水印。 微信图片_20240808175008.jpg
去除后:
image.png
python代码:
[Python] 纯文本查看 复制代码
import fitz
import os
import shutil

def remove_watermarks_by_sizes(pdf_path, output_path, watermark_sizes, watermark_rects, watermark_texts):
    """
    从PDF中删除特定大小的图片(水印)和特定的文字。
    参数:
    pdf_path (str): 输入PDF文件的路径。
    output_path (str): 输出PDF文件的路径。
    watermark_sizes (list of tuples): 水印的尺寸列表,每个元素是一个 (宽度, 高度) 的元组。
    watermark_rects (list of str): 水印的矩形位置列表,每个元素是一个矩形位置字符串。
    watermark_texts (list of str): 要删除的特定文字列表。
    """
    doc = fitz.open(pdf_path)

    for page_num in range(len(doc)):
        page = doc.load_page(page_num)
        images = page.get_images(full=True)

        for img in images:
            xref = img[0]
            base_image = doc.extract_image(xref)
            image_width = base_image['width']
            image_height = base_image['height']
            image_rect = str(page.get_image_rects(xref))

            for watermark_size, watermark_rect in zip(watermark_sizes, watermark_rects):
                watermark_width, watermark_height = watermark_size

                # 检查图像尺寸是否与水印尺寸匹配
                if watermark_rect:
                    if (
                            image_width == watermark_width and image_height == watermark_height and image_rect == watermark_rect):
                        print(f"Removing image at {image_rect} of size ({watermark_width}, {watermark_height})")
                        page.delete_image(xref)
                        break
                else:
                    if (image_width == watermark_width and image_height == watermark_height):
                        print(f"Removing image at {image_rect} of size ({watermark_width}, {watermark_height})")
                        page.delete_image(xref)
                        break

        # 查找并删除特定文字
        for watermark_text in watermark_texts:
            text_instances = page.search_for(watermark_text)
            for inst in text_instances:
                print(f"Removing text: {watermark_text} at {inst}")
                page.add_redact_annot(inst, text="")  # 添加遮盖注释
        page.apply_redactions()  # 应用遮盖注释

    temp_output_path = output_path + ".temp"
    doc.save(temp_output_path)
    doc.close()
    shutil.move(temp_output_path, output_path)


def process_pdfs_in_directory(directory_path, watermark_sizes, watermark_rects, watermark_texts, save_option):
    """
    处理目录下的所有PDF文件。
    参数:
    directory_path (str): PDF文件所在的目录路径。
    watermark_sizes (list of tuples): 水印的尺寸列表,每个元素是一个 (宽度, 高度) 的元组。
    watermark_rects (list of str): 水印的矩形位置列表,每个元素是一个矩形位置字符串。
    watermark_texts (list of str): 要删除的特定文字列表。
    save_option (str): 保存选项 ('overwrite' 或 'suffix')。
    """
    for filename in os.listdir(directory_path):
        if filename.lower().endswith('.pdf'):
            pdf_path = os.path.join(directory_path, filename)

            if save_option == 'overwrite':
                output_path = pdf_path
            elif save_option == 'suffix':
                base, ext = os.path.splitext(filename)
                output_path = os.path.join(directory_path, f"{base}_qsy{ext}")
            else:
                raise ValueError("Invalid save_option. Use 'overwrite' or 'suffix'.")

            remove_watermarks_by_sizes(pdf_path, output_path, watermark_sizes, watermark_rects, watermark_texts)
            print(f"Processed {pdf_path} -> {output_path}")

# 使用示例
directory_path = r"D:\学习\一建2024\2024\经济\讲义"  # 使用原始字符串
watermark_sizes = [(83, 83), (213, 72), (750, 1000)]  # 假设有多个水印图片的大小
watermark_rects = ["", "", ""]  # 对应的水印的矩形位置需要测试获取,主要是防止误删除和水印同样大小的图片。
watermark_texts = ["扫码关注更多内容", "学员专用 请勿外泄"]  # 要删除的特定文字列表

# 选择保存方式:'overwrite'覆盖保存 或 'suffix'添加后缀保存
save_option = 'overwrite'  # 选择'suffix' 或 'overwrite'

process_pdfs_in_directory(directory_path, watermark_sizes, watermark_rects, watermark_texts, save_option)

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小小小酥 发表于 2024-8-14 14:11
感谢大佬分享
HR741158 发表于 2024-8-16 11:49
qqwwww8741 发表于 2024-8-26 15:03
 楼主| threettiger 发表于 2024-8-26 15:11
qqwwww8741 发表于 2024-8-26 15:03
想问一下这个图片的大小是如何获取的呢

pdf编辑器里面可以查看图片属性。
qqwwww8741 发表于 2024-8-26 15:23
我试了下我的好像不行。 能指点一下么。 大佬
1724656983587.jpg
234.png
guozishula 发表于 2024-8-30 00:01
好东西呀,去水印多好呀,收藏起来,谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 18:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表