使用Pillow和img2pdf将图像转换为pdf

时间:2019-10-18 21:35:41

标签: python python-imaging-library img2pdf

我有一项任务,要求我从上传的图像(jpg或png)中获取数据,根据要求调整其大小,然后将其转换为pdf,然后存储在s3中。

  1. 文件以ByteIO的形式出现
  2. 我有Pillow可用,因此可以调整图像的大小
  3. 现在文件类型为class 'PIL.Image.Image',我不知道如何继续。
  4. 我在https://gitlab.mister-muffin.de/josch/img2pdf上找到了img2pdf库,但是当我使用PIL格式(使用tobytes()时,我不知道如何使用它)
  5. s3上传看起来也像文件一样的对象,因此我不想在再次加载之前将其保存到临时文件中。那么,在这种情况下,我甚至需要img2pdf吗?

我如何实现这个目标?

编辑:我尝试使用tobytes()并直接上传到s3。上传成功。但是,在下载内容时,它会显示一个空白页。似乎文件数据未写入pdf文件

编辑2:实际上是在s3上并检查了存储的文件。当我下载并打开它时,它显示cannot be opened

编辑3:由于我仍在尝试可行的方法,因此我实际上并没有有效的代码,但这是要点

data = request.FILES['file'].file  # where the data is
im = Image.open(data)
(width, height) = (im.width // 2, im.height // 2)  # example action I wanna take with Pillow
data = im_resized.tobytes()
# potential step for using img2pdf here but I don't know how
# img2pdf.convert(data)  # this fails because "ImageOpenError: cannot read input image (not jpeg2000). PIL: error reading image: cannot identify image file <_io.BytesIO..."
# img2pdf.convert(im_resized)  # this also fails because "TypeError: Neither implements read() nor is str or bytes"
upload_to_s3(data)  # some function that utilizes boto3 to upload to s3

0 个答案:

没有答案