Esta función a continuación acepta una cadena JSON de un montón de imágenes codificadas en base64 en su interior. Necesito que esto devuelva un PDF codificado en base64, y lo hace, pero solo me daría una página, la primera imagen dentro de la cadena JSON ... Tengo este código:
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
Soy un poco novato con Python (estoy seguro de que puedes ver eso en el código). Pero tanto como sea posible, me gustaría evitar el uso de más módulos que no vienen con python 2.7.
Estoy usando la API de Odoo 10.0 con esta cosa, y no puedo usar pip, por lo que es un poco complicado importar nuevos módulos. Aunque, si cree que realmente no hay forma de que pueda hacerlo usando solo PIL, aún agradeceré enormemente la ayuda.
Funciona bien, simplemente resulta que el módulo PIL de odoo 10 estaba muy desactualizado, solo necesitaba actualizarlo
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras