使用 python 将 jpg 转换为 pdf 时旋转无效

Invalid rotation when converting jpg to pdf with python

我正在尝试使用 img2pdf 将 jpg 转换为 pdf。

它适用于大多数 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

如果我查看图像元数据,它会显示:

Unknown rotation value 0
ColorSpace=sRGB

是否可以设置旋转值?

非常感谢任何提示。

BR 克雷斯滕

我猜问题出在下面的代码行上。

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)
from PIL import Image

image1 = Image.open(r'C:\Users\Ron\Desktop\Test\image1.png')
image2 = Image.open(r'C:\Users\Ron\Desktop\Test\image2.png')
image3 = Image.open(r'C:\Users\Ron\Desktop\Test\image3.png')
image4 = Image.open(r'C:\Users\Ron\Desktop\Test\image4.png')
 
im1 = image1.convert('RGB')
im2 = image2.convert('RGB')
im3 = image3.convert('RGB')
im4 = image4.convert('RGB')

imagelist = [im2,im3,im4]

im1.save(r'C:\Users\Ron\Desktop\Test\myImages.pdf',save_all=True, append_images=imagelist)

It is work for me