Объедините несколько изображений base64 в одно - PullRequest
0 голосов
/ 02 октября 2018

Если у меня есть несколько строк base64, которые являются изображениями (одна строка = одно изображение).Есть ли способ объединить их и декодировать в один файл изображения?т.е. из нескольких строк base64, объединить и вывести один файл изображения.

Я не уверен, как бы я подошел к этому с помощью подушки (или, если она мне даже понадобилась).

Дополнительные пояснения:

  1. Исходные изображения в формате TIFFкоторые закодированы в base64
  2. Когда я говорю «объединить», я имею в виду превращение нескольких изображений в многостраничное изображение, как вы видите в многостраничном PDF

1 Ответ

0 голосов
/ 03 октября 2018

Я перерыл документацию Pillow (v5.3) и нашел что-то, что, кажется, работает.По сути, есть две фазы:

  1. Сохранить закодированные строки base64 как TIF
  2. Добавить их вместе и сохранить на диск

Пример с использованием Python 3.7:

from PIL import Image
import io
import base64

base64_images = ["asdfasdg...", "asdfsdafas..."]
image_files = []

for base64_string in base64_images:
    buffer = io.BytesIO(base64.b64decode(base64_string))
    image_file = Image.open(buffer)
    image_files.append(image_file)

combined_image = images_files[0].save(
    'output.tiff', 
    save_all=True, 
    append_images=image_files[1:]
    )                   

В приведенном выше коде я сначала создаю объекты PIL Image из байтовых буферов, чтобы сделать все это в памяти, но вы, вероятно, можете использовать .save() и вместо этого создать кучу временных файловесли ввод / вывод не имеет значения.

После того, как у меня есть все объекты PIL Image, я выбираю первое изображение (при условии, что они были в нужном порядке в списке base64_images) и добавляю остальные изображенияс флагом append_images.Полученное изображение имеет все кадры в одном выходном файле.

Я предполагаю, что этот шаблон можно расширить для любого формата изображения, который поддерживает аргументы ключевых слов save_all и append_images.В документации на подушку должно быть указано, поддерживается ли она.

...