如何将PIL图像数组转换为base64格式的PDF字符串?

时间:2018-08-01 12:31:06

标签: python base64 python-imaging-library odoo-10

下面的此函数在内部接受一堆base64编码图像的JSON字符串。我需要这个东西来返回以base64编码的PDF,它确实可以,但是它只会给我一页,即JSON字符串中的第一张图片...我有以下代码:

import json
import base64
from PIL import Image
from io import BytesIO
import numpy as np
import cv2

class ImageStuff(models.TransientModel):
   _name = 'image.camera_scan'
   _description = 'Do stuff with your images'

    @api.model
    def generate_pdf_from_b64(self, b64_arr_str):
       b64_arr = json.loads(b64_arr_str)
       pil_arr, count, pil0 = [], 0, False
       for blob in b64_arr:
           b64 = blob['b64'].split(',')[1]
           pil = Image.open(BytesIO(base64.b64decode(b64)))
           if count > 0: pil_arr.append(pil)
           else: pil0 = pil
           count += 1

       in_mem_file = BytesIO()

       pil0.save(in_mem_file, format="PDF", resolution=100.0, 
                 save_all=True, append_images=pil_arr) 
                 # I think it's that line above that doesn't work

       in_mem_file.seek(0)
       img_bytes = in_mem_file.read()
       base64_encoded_result_bytes = base64.b64encode(img_bytes)
       b64_str = base64_encoded_result_bytes.decode('ascii')

       return b64_str

我是python的新手(我确定您可以在代码中看到它)。但我要尽可能避免使用python 2.7附带的其他模块。

我正在使用Odoo 10.0 API,但我无法使用pip,因此导入新模块有点麻烦。虽然,如果您认为我真的无法仅使用PIL做到这一点,我仍然会非常欢迎您提供帮助。

1 个答案:

答案 0 :(得分:0)

效果很好,事实证明odoo 10的PIL模块已经过时了,只需要对其进行升级即可