下面的此函数在内部接受一堆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做到这一点,我仍然会非常欢迎您提供帮助。
答案 0 :(得分:0)
效果很好,事实证明odoo 10的PIL模块已经过时了,只需要对其进行升级即可