丢失信息获取 pdf 页面作为图像

Lost information getting pdf page as image

我不是任何意义上的专家,我正在尝试将pdf页面提取为图像以供稍后进行一些处理。我为此使用了以下代码,它是我根据本页中的其他建议构建的。

import fitz
from PIL import Image


dir = r'C:\Users\...'
files =  os.listdir(dir)
print(dir+files[21])
doc = fitz.open(dir+files[21])
page = doc.loadPage(2)
zoom = 2
mat = fitz.Matrix(zoom, zoom)
pix = page.getPixmap(matrix = mat)
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)

density=img.getdata()

通常这会给我图像的像素信息,但在本例中它 returns 是一个白色像素列表。我不知道这是什么原因...如果询问,会显示图像 (img),但不会显示其数据。

我会很感激任何帮助?

如果您想将 pdf 转换为图像并进行处理,您可能会使用这些方法。这个特别简单的示例读取了 5 页 PDF,并在最后一页查看图像中特定颜色的百分比;慢速方式和快速方式。


import pdf2image
import numpy as np

# details:
# https://pypi.org/project/pdf2image/
images = pdf2image.convert_from_path('test.pdf')

# Get first five pages, just for testing
i = 1
for image in images:
    print(i," shape: ", image.size)
    image.save('output' + str(i) + '.jpg', 'JPEG')
    i = i + 1
    if(i>5):
        break

color_test=(128,128,128)
other=0
specific_color=0

# Look at last image
for i in range(image.width):
    for j in range(image.height):
        x=image.getpixel((i,j))
        if(x[0]==color_test[0] and x[1]==color_test[1] and x[2]==color_test[2]):
            specific_color=specific_color+1
        else:
            other=other+1

print("frac of specific color = ", specific_color/(specific_color+other))

# faster!
x=np.asarray(image)
a=np.where(np.all(x==color_test,axis=-1))
print("(faster) frac of color = ", len(a[0])/((image.width)*(image.height)))

如果我采用更短的路径并将 doc.loadPage 替换为 doc.getPagePixmap

,则代码有效
import fitz
from PIL import Image


dir = r'C:\Users\...'
files =  os.listdir(dir)
print(dir+files[21])
doc = fitz.open(dir+files[21])
pix= doc.getPagePixmap(2)
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)

density=img.getdata()

我仍然不知道为什么长代码失败,工作方法不允许我获得更好的提取页面分辨率版本。