You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ghostscript等工具按条件过滤PDF图像仅保留最大背景图

Ghostscript原生的过滤参数仅支持全局移除/保留所有图像、文本、矢量对象,不支持按图像属性筛选,你可以通过以下两种方案实现需求:


方案1:基于pikepdf的Python实现(最灵活,完全匹配你的筛选规则)

可以自动识别符合「1bit二值、尺寸最大、体积最大」规则的图像,同时自动移除所有文本、矢量内容:

  1. 先安装依赖:
    # Ubuntu
    sudo apt install python3-pip && pip3 install pikepdf pillow
    # Mac
    brew install python3 && pip3 install pikepdf pillow
    
  2. 运行以下脚本即可:
    import pikepdf
    from PIL import Image
    import io
    
    INPUT_PDF = "你的输入文件路径.pdf"
    OUTPUT_PDF = "你的输出文件路径.pdf"
    
    with pikepdf.open(INPUT_PDF) as pdf:
        for page in pdf.pages:
            # 先清空当前页所有原有内容
            page.Contents = pikepdf.Array()
            max_score = 0
            target = None
            # 遍历当前页所有图像
            for img_name, raw_img in page.images.items():
                img_data = raw_img.read_bytes()
                file_size = len(img_data)
                # 校验是否为1bit二值图
                with Image.open(io.BytesIO(img_data)) as pil_img:
                    if pil_img.mode != "1":
                        continue
                    # 按「尺寸优先级>体积优先级」计算评分
                    pixel_size = pil_img.width * pil_img.height
                    current_score = pixel_size * 1000000 + file_size
                    if current_score > max_score:
                        max_score = current_score
                        target = (img_name, raw_img, pil_img.width, pil_img.height)
            # 将符合要求的图像铺满页面
            if target:
                _, raw_img, w, h = target
                page.Contents = pdf.make_stream(f"q\n1 0 0 1 0 0 cm\n/img {w} 0 0 {h} 0 0 cm\n/img Do\nQ")
                page.Resources.XObject = pikepdf.Dictionary({"/img": raw_img})
        pdf.save(OUTPUT_PDF)
    

方案2:纯命令行实现(适合不想写代码的场景)

通过通用PDF工具组合实现筛选:

  1. 先安装依赖工具:
    # Ubuntu
    sudo apt install poppler-utils imagemagick img2pdf
    # Mac
    brew install poppler imagemagick img2pdf
    
  2. 导出PDF中所有嵌入图像:
    pdfimages -all 输入文件.pdf ./tmp_extract_img
    
  3. 查看所有导出图像的属性,筛选符合要求的图像:
    identify ./tmp_extract_img*
    
    输出结果中会标注每一张图的位深、像素尺寸、文件体积,手动挑出位深为1-bit、像素尺寸最大、体积最大的图像,假设文件名为selected.tif
  4. 将选中的图像转为PDF文件:
    img2pdf selected.tif -o 输出文件.pdf
    

内容的提问来源于stack exchange,提问作者taiyodayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:15:03