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

查看 56|回复 6
作者:threettiger   
去除某目录下所有pdf的图片,文字水印。


微信图片_20240808175008.jpg (293.1 KB, 下载次数: 0)
下载附件
2024-8-8 17:50 上传

去除后:


image.png (517.45 KB, 下载次数: 0)
下载附件
2024-8-8 17:56 上传

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)

水印, 是一个

小小小酥   

感谢大佬分享
HR741158   

先收藏一下,学习
qqwwww8741   

想问一下这个图片的大小是如何获取的呢
threettiger
OP
  


qqwwww8741 发表于 2024-8-26 15:03
想问一下这个图片的大小是如何获取的呢

pdf编辑器里面可以查看图片属性。
qqwwww8741   

我试了下我的好像不行。 能指点一下么。 大佬
guozishula   

好东西呀,去水印多好呀,收藏起来,谢谢楼主
您需要登录后才可以回帖 登录 | 立即注册

返回顶部