Python pdfminer extract image производит несколько изображений на странице (должно быть одно изображение)
Я пытаюсь извлечь изображения, которые находятся в PDF. Файл, с которым я работаю, имеет 2+ страницы. Страница 1 - это текст, а страницы 2-n - это изображения (по одному на страницу, или это может быть одно изображение, охватывающее несколько страниц; у меня нет контроля над источником).
Я могу разобрать текст со страницы 1, но когда я пытаюсь получить изображения, я получаю 3 изображения на страницу изображения. Я не могу определить тип изображения, что затрудняет его сохранение. Кроме того, попытка сохранить на каждой странице 3 изображения в виде одного img не дает результата (поскольку не может быть открыта с помощью поиска в OSX)
Образец:
fp = open('the_file.pdf', 'rb')
parser = PDFParser(fp)
document = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(document):
interpreter.process_page(page)
pdf_item = device.get_result()
for thing in pdf_item:
if isinstance(thing, LTImage):
save_image(thing)
if isinstance(thing, LTFigure):
find_images_in_thing(thing)
def find_images_in_thing(outer_layout):
for thing in outer_layout:
if isinstance(thing, LTImage):
save_image(thing)
save_image
либо пишет файл на изображение в pageNum_imgNum
отформатировать в 'wb'
режим или одно изображение на странице в 'a'
Режим. Я пробовал многочисленные расширения файлов без удачи.
Ресурсы, которые я изучил:
http://denis.papathanasiou.org/posts/2010.08.04.post.html (устаревшая версия pdfminer) http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.html
3 ответа
Прошло много времени с тех пор, как этот вопрос был задан, но я внесу свой вклад в интересах сообщества и, возможно, в вашу пользу:)
Я использовал парсер изображений pdfimages, доступный через платформу poppler для обработки PDF. Он также выводит несколько файлов на изображение; для генераторов PDF кажется довольно распространенным поведение "разбивать" или "разбивать" изображения на несколько изображений, которые затем необходимо соединить воедино при извлечении, но при просмотре PDF они кажутся совершенно неповрежденными. Форматы / расширения файлов, которые я видел в pdfimages и в других местах: png, tiff, jp2, jpg, ccitt. Вы пробовали все это?
Вы пробовали что-то подобное?
from binascii import b2a_hex
def determine_image_type (stream_first_4_bytes):
"""Find out the image file type based on the magic number comparison of the first 4 (or 2) bytes"""
file_type = None
bytes_as_hex = b2a_hex(stream_first_4_bytes).decode()
if bytes_as_hex.startswith('ffd8'):
file_type = '.jpeg'
elif bytes_as_hex == '89504e47':
file_type = '.png'
elif bytes_as_hex == '47494638':
file_type = '.gif'
elif bytes_as_hex.startswith('424d'):
file_type = '.bmp'
return file_type
(Частичное) решение проблемы мозаики изображений размещено здесь: PDF: извлеченные изображения нарезаны / мозаичны
Я бы использовал библиотеку изображений, чтобы найти тип изображения:
import io
from PIL import Image
image = Image.open(io.BytesIO(thing.stream.get_data()))
print(image.format)