丢失信息获取 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()
我仍然不知道为什么长代码失败,工作方法不允许我获得更好的提取页面分辨率版本。
我不是任何意义上的专家,我正在尝试将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()
我仍然不知道为什么长代码失败,工作方法不允许我获得更好的提取页面分辨率版本。