Неверное вращение при преобразовании JPG в PDF с python - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь преобразовать JPG в PDF с img2pdf.

Он работает с большинством JPG, но не со всеми.

Вот мой сценарий:

import img2pdf
import PIL.Image
import os
image = PIL.Image.open("Lidl.jpg")
pdf_bytes = img2pdf.convert(image.filename)
file = open(pdf_path, "wb")
file.write("file.pdf")
image.close()
file.close()

Вот ошибка, которую я получаю:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    pdf_bytes = img2pdf.convert(image.filename)
  File "/home/ksb/Dropbox/Python/imap/venv/lib/python3.6/site-packages/img2pdf.py", line 1829, in convert
    ) in read_images(rawdata, kwargs["colorspace"], kwargs["first_frame_only"]):
  File "/home/ksb/Dropbox/Python/imap/venv/lib/python3.6/site-packages/img2pdf.py", line 1191, in read_images
    imgdata, imgformat, default_dpi, colorspace, rawdata
  File "/home/ksb/Dropbox/Python/imap/venv/lib/python3.6/site-packages/img2pdf.py", line 1030, in get_imgmetadata
    'Image "%s": invalid rotation (%d)' % (im.name, value)
NameError: name 'im' is not defined

Если я просматриваю метаданные изображения, оно говорит:

Неизвестное значение вращения 0
ColorSpace = sRGB

Можно ли установить значение поворота?

Любые советы очень приветствуются.

BR Kresten

1 Ответ

0 голосов
/ 25 февраля 2020

Полагаю, проблема в приведенной ниже строке кода.

file.write("file.pdf")

Здесь попробуйте передать байты, полученные из функции convert.

file.write(pdf_bytes)

В случае ошибки, которую вы получаете Вы можете попробовать как сказано ниже. Попробуйте использовать библиотеку imdirect

from PIL import Image
import imdirect
img = Image.open('Lidl.jpg')
img_rotated = imdirect.autorotate(img)

Приведенный выше фрагмент кода скопирован со страницы описания проекта библиотеки. Также прочтите краткое описание, чтобы узнать, почему возникают такие проблемы.

https://pypi.org/project/imdirect/

Если все еще не работает, как часть последней попытки, поверните изображение после открытие и перед преобразованием в байты с желаемым углом, который удовлетворяет вашим требованиям.

image = PIL.Image.open("Lidl.jpg")
image.rotate(90) #90 is rough number, you calculate, what you need.
pdf_bytes = img2pdf.convert(image.filename)
...