【问题标题】:Python How to merge 3 images into a default background image and save as new image?Python 如何将 3 张图像合并为默认背景图像并另存为新图像?
【发布时间】:2015-09-16 15:43:20
【问题描述】:

我正在尝试使用 python 自动合并图像并将结果发送到打印机。

我通过做这件事来学习python,但我现在无法进入下一步。

我将使用 Raspberry Pi 来运行它,并将 Pi 作为本地服务器来处理用户上传的图像。

我想合并这样的图像

经过大量搜索,我得到了一些代码,但总是出错。

import os
from PIL import Image

images = [f for f in os.listdir('path')]

result = Image.open('/mydir/bg.jpg')
result.paste(Image.open(images[0],(133,106)
result.paste(Image.open(images[1],(881,106)
result.paste(Image.open(images[2],(1629,106)
result.save('path'+'.jpg')

我合并了一些代码来得到这个。我知道这是不对的,但我尽力了。

我可以通过使用特定的文件名得到我想要的。现在我猜图像被读取为列表中的刺痛,因此 Image.open 无法正确打开文件。

我的真正目标是列出上传文件夹中的文件并将它们与默认背景图像合并以创建可以打印的新图像。

也许你有更好的主意,请告诉我。我会非常感谢你的帮助。

【问题讨论】:

  • 您收到的确切错误是什么?

标签: python image merge


【解决方案1】:

您似乎错过了以下几行中的右括号:

result.paste(Image.open(images[0]),(133,106))
result.paste(Image.open(images[1]),(881,106))
result.paste(Image.open(images[2]),(1629,106))

更新:

完整的解决方案如下。

import os
from PIL import Image

bg_path = './bg.jpg'
fg_path = './fg'

images = [os.path.join(fg_path, name) for name in os.listdir(fg_path) if name.endswith('.jpg')]

result = Image.open(bg_path)
result.paste(Image.open(images[0]),(133,106))
result.paste(Image.open(images[1]),(881,106))
result.paste(Image.open(images[2]),(1629,106))
result.save('{}.jpg'.format(fg_path))

【讨论】:

  • 错误显示我是fb = builtins.open(fp, 'rb')。我不知道那是什么意思。我受到这两个代码的启发linklink
  • @MonSwag,你确定/mydir/bg.jpg 文件存在吗?它是从根开始的绝对路径。也许您想参考./mydir/bg.jpg(相对于当前目录)或~/mydir/bg.jpg(相对于主目录)?同样os.listdir() 仅列出不带目录的名称。您需要调用os.path.join('path', f)获取完整路径。
  • 你是对的。我在我的代码中使用完整路径。我在这里使用/mydir/bg.jpg 作为示例。如果我在列表 images = ['/images/1.jpg', 'images/2.jpg'] 中使用特定的文件名,代码将运行而不会出错,结果图像就是我想要的。但是当我不知道图像的名称时,我希望代码完成我的工作。
  • @MonSwag 我已经用完整的程序源更新了我的答案。它包含所有更正并为我工作:)
  • 非常感谢!你太棒了!还有一件事,fg_path 表示该文件夹包含图像,对吗?
猜你喜欢
  • 2012-03-04
  • 2011-05-24
  • 2022-07-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
相关资源
最近更新 更多