将多个base64图像合并为一个

时间:2018-10-02 20:47:44

标签: python python-imaging-library

如果我有多个base64字符串是图像(一个字符串=一个图像)。有没有一种方法可以将它们组合并解码为单个图像文件?即从多个base64字符串中合并并输出一个图像文件。

我不确定如何使用Pillow来解决这个问题(或者我是否需要它)。

进一步澄清:

  1. 源图像是已编码为base64的TIFF
  2. 当我说“合并”时,是指将多张图像转换成多页图像,就像在多页PDF中看到的一样

1 个答案:

答案 0 :(得分:0)

我仔细阅读了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对象,以便在内存中完成整个操作,但是如果I / O不是,则可以使用.save()并创建一堆临时文件来代替不用担心。

一旦有了所有的PIL图像对象,就选择第一个图像(假设它们在base64_images列表中以所需的顺序排列)并在其余图像上附加append_images标志。生成的图像将所有帧包含在一个输出文件中。

我假设此模式可扩展为支持save_allappend_images关键字参数的任何图像格式。枕头文档应该让您知道它是否受支持。