如何计算PDF中图片的实际DPI?解决OCR后页面尺寸异常问题
解决多页PDF OCR时的页面尺寸异常问题
核心结论:可以通过PDF页面尺寸和提取的图片像素计算正确DPI
PDF的默认单位是点(Point),行业标准为1英寸=72点,这是计算的核心依据。你可以按以下步骤推导正确的DPI:
步骤1:将PDF页面尺寸从点转换为英寸
用PDF页面的宽/高点数除以72,得到实际物理尺寸:
- 宽度:
612.24 ÷ 72 = 8.503英寸(对应标准8.5英寸) - 高度:
790.8 ÷ 72 = 10.983英寸(对应标准11英寸)
步骤2:用图片像素数除以物理尺寸得到DPI
用提取出的图片宽/高像素数,分别除以对应的物理尺寸:
- 宽度DPI:
2552 ÷ 8.5 ≈ 300DPI - 高度DPI:
3295 ÷ 11 ≈ 299.5DPI(接近300DPI,和原PDF一致)
自动化处理建议
在你的OCR流程中加入自动计算逻辑,无需手动预设参数:
- 用
pypdf获取每页的页面尺寸(单位为点) - 计算物理尺寸:
物理宽度 = 页面宽点数 / 72,物理高度 = 页面高点数 /72 - 获取提取图片的像素尺寸(比如用PIL的
Image.size) - 计算目标DPI:
目标DPI = 图片像素宽 / 物理宽度(宽高计算结果通常一致,取任意值即可) - 调整图片DPI后再喂给Tesseract:
用ImageMagick的命令:
或用Python PIL库处理:convert input.png -density [计算出的DPI] -units PixelsPerInch output.pngfrom PIL import Image img = Image.open("input.png") # 代入计算得到的dpi值 target_dpi = (2552 / 8.5, 3295 / 11) img.save("output.png", dpi=target_dpi) - 用调整后的图片生成OCR PDF,即可保持原页面尺寸。
内容的提问来源于stack exchange,提问作者user2509710
相关产品推荐
相关产品推荐

