Сохранение pdfminer извлеченных LTimages - PullRequest
0 голосов
/ 20 июня 2019

Я работаю с Python 3, и у меня возникла странная проблема с pdfminer (.six).Я использую код, подобный OP в этом вопросе: Python pdfminer extract image производит несколько изображений на странице (должно быть одно изображение)

#ltimageobject is an object obtained from the previous script
from PIL import image

im =Image.frombytes(mode="1",\
                    data = ltimageobject.stream.data,\
                    size = ltimageobject.srcsize,\
                    decoder_name='raw') 
Workingmethod = im.save("new_fromIm.jpg")
#ltimageobject.stream.get_data() would also work to obtain data.
#get_rawdata() or rawdata won't work.

, но я ничего не могу получить от записифайл данных в байтах.

with open("new_decoded.jpg", "wb") as new:
    new.write(im.tobytes(encoder_name="raw"))
    #this doesn't work
with open("new_decoded2.jpg", "w", encoding=codecs.open("raw")) as new:
    new.write(av)
    #this doesn't work either

Файлы немного короче (1215 байт вместо 1247 байт), и я предполагаю, что в них есть все, что нужно, чтобы обернуть изображение в недостающие байты.Я точно указал, что нашел правильный режим с помощью следующего фрагмента:

encoders = Image.ENCODERS
print(encoders)
for mode in encoders:
    try:
        print(Image.frombytes(mode=mode, data = savelt.stream.data, size = savelt.srcsize,\
                      decoder_name='raw'))
        except Exception as x:
        #print("fail on mode {}: {}".format(mode, x))
        continue

Обратите внимание, что ltimageobject.srcsize = / = (int (ltimageobject.height, int (ltimageobject.width))

Что я делаю неправильно, когда хочу использовать запись в байтовом файле? Это должен быть быстрый и грязный метод, но это должно сработать. Я уверен, что не могу найти магическое число b "\ xff \ xd8" вначало данных.

...