Как создать PIL.Image из XObjects PDF-изображения с помощью pikepdf в PythonPython

Программы на Python
Ответить
Anonymous
 Как создать PIL.Image из XObjects PDF-изображения с помощью pikepdf в Python

Сообщение Anonymous »

Я пытаюсь выполнить сжатие PNG без потерь изображений в PDF-файлах с помощью Pillow. Вот часть моего кода, который обращается к объектам изображения xobjects и пытается использовать их для создания объекта PIL.Image

Код: Выделить всё

import io
import pikepdf
from PIL import Image

with pikepdf.open("./doc.pdf") as pdf:
for page in pdf.pages:
for image_key, image_data in page.images.items():
raw_data_stream = image_data.get_raw_stream_buffer()
img_data_io = io.BytesIO(raw_data_stream)
img_data_io.seek(0)
img = Image.open(img_data_io)
Это выдает PIL.UnidentifiedImageError: невозможно идентифицировать файл изображения
Я пытался изменить его на

Код: Выделить всё

img = Image.open(img_data_io.read())
Но это выдает ошибку UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0xde в позиции 1: недопустимый байт продолжения. Я пробовал это на 25 разных PDF-файлах, и у них разные проблемные байты (например, 0x83), но все они выдают эту ошибку.
Это содержимое image_data:

Код: Выделить всё

, data=, {
"/BitsPerComponent": 4,
"/ColorSpace": [ "/Indexed", [ "/ICCBased", pikepdf.Stream(owner=, data=, {
"/Alternate": "/DeviceRGB",
"/Filter": "/FlateDecode",
"/Length": 2598,
"/N": 3
}) ], 15, pikepdf.Stream(owner=, data=, {
"/Length": 49
}) ],
"/Filter": "/FlateDecode",
"/Height": 326,
"/Length": 28607,
"/Subtype": "/Image",
"/Type": "/XObject",
"/Width": 1455
})>
Как создать объект PIL.Image из такого XObject, извлеченного из PDF-файла?


Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»