当前位置:首页>python>别再手动抠水印了!Python一行代码,批量干掉扫描件水印

别再手动抠水印了!Python一行代码,批量干掉扫描件水印

  • 2026-09-05 23:11:03
别再手动抠水印了!Python一行代码,批量干掉扫描件水印

场景还原:扫描版PDF、电子书、合同归档……很多时候你只想把里面的高清图片抽出来,但导出来的PDF满屏水印也是真烦人。

🧩 它做了什么

这个脚本会逐页扫描 PDF,找出每页像素面积最大的 JPG 图片,然后把这些图片重新拼成一份新的 PDF。水印?直接被“过滤”掉了!

✅ 自动识别每页最大图片✅ 按原图分辨率输出,画质无损✅ 本地运行,数据不出机器✅ 批量处理当前目录所有 PDF

⚙️ 运行效果

📂 正在解析: 扫描文档.pdf   
✅ 第1页最大JPG xref=5 (2480×3508) → 已添加   
✅ 第2页最大JPG xref=12 (2480×3508) → 已添加   
✅ 第3页最大JPG xref=19 (2480×3508) → 已添加   
ℹ️ 第4页未找到JPG图像,已跳过  
🎉 完成! 共提取 3 张JPG 
📄 输出文件: 扫描文档_最大JPG提取_20260121_143022.pdf

📝 核心代码

基于 PyMuPDF (fitz),几十行代码搞定:

# 每页提取像素面积最大的JPG 
for page_num in range(len(src_doc)):
     page = src_doc[page_num]
     images = page.get_images(full=True)
          largest_image = None
          max_area = 0 
         for img_info in images:
         xref = img_info[0]
         base_image = src_doc.extract_image(xref)
         ext = base_image.get("ext", "").lower()
                  if ext not in ("jpg", "jpeg"): 
                  continue
         width = base_image["width"]
         height = base_image["height"]
         area = width * height
          if area > max_area:
             max_area = area
          largest_image = base_image          
       # 插入新PDF页面
       if largest_image:
         new_page = new_doc.new_page(
             width=width*72/150,
              height=height*72/150
         )         
   new_page.insert_image(
             new_page.rect,              
           stream=largest_image["image"]         )

💡 小细节:像素转 PDF 单位时需要除以参考 DPI(这里用的 150),不然页面尺寸会大得离谱。

🚀 如何使用

① 安装依赖:pip install pymupdf② 把脚本和 PDF 放同一目录③ 运行脚本,自动批量处理④ 生成的文件带时间戳,不会覆盖原文件

#PDF去水印#办公效率#Python干货#职场技能#扫描全能王平替#黑科技#程序员日常#打工人必备

完整源码已整理好

关注后回复关键词 PDF提取 获取

本地运行 · 无需上传 · 永久免费


—— End ——

每周分享一个实用小工具 · 让重复工作自动化

最新文章

随机文章