首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python图像库:如何将4张图片组合成2 x 2的网格?

Python图像库:如何将4张图片组合成2 x 2的网格?
EN

Stack Overflow用户
提问于 2010-12-31 09:02:59
回答 5查看 41.5K关注 0票数 28

我有4个目录与动画的图像。我想用这组图像生成一个单独的图像,将4个图像排列成一个2x2的网格,用于动画的每一帧。

到目前为止我的代码是:

代码语言:javascript
复制
import Image

fluid64 = "Fluid64_half_size/00"
fluid128 = "Fluid128_half_size/00"
fluid512 = "Fluid512_half_size/00" 
fluid1024 = "Fluid1024_half_size/00" 

out_image = "Fluid_all/00"

for pic in range(1, 26):
    blank_image = Image.open("blank.jpg")

    if pic < 10:
        image_num = "0"+str(pic)
    else:
        image_num = str(pic)

    image64 = Image.open(fluid64+image_num+".jpg")
    image128 = Image.open(fluid128+image_num+".jpg")
    image512 = Image.open(fluid512+image_num+".jpg")
    image1024 = Image.open(fluid1024+image_num+".jpg")
    out = out_image + image_num + ".jpg"

    blank_image.paste(image64, (0,0)).paste(fluid128, (400,0)).paste(fluid512, (0,300)).paste(fluid1024, (400,300)).save(out)

不知道为什么它不能工作。我得到了一个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\Casey\Desktop\Image_composite.py", line 24, in <module>
    blank_image.paste(image64, (0,0)).paste(fluid128, (400,0)).paste(fluid512, (
ste(fluid1024, (400,300)).save(out)
AttributeError: 'NoneType' object has no attribute 'paste'
shell returned 1

任何帮助都是很棒的。谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-31 09:15:57

唯一的问题是“粘贴”不会返回图像对象--它会在原地修改“空白”图像。

因此,当调用第二个粘贴(使用fuild128图像的粘贴)时,它尝试应用于"None“-这是第一个图像的返回值。

如果这是您遇到的唯一问题,只需每行调用一次paste,如下所示:

代码语言:javascript
复制
blank_image.paste(image64, (0,0))
blank_image.paste(fluid128, (400,0))
blank_image.paste(fluid512, (0,300))
blank_image.paste(fluid1024, (400,300))
blank_image.save(out)

尽管看起来可能需要缩放每个图像,以便它们的格式也匹配。并且您的"image_num“变量的代码是不必要的。Python真的很擅长处理字符串--只需这样做:

代码语言:javascript
复制
image64 = Image.open(fluid64 + "%02d.jpg" % pic)
票数 41
EN

Stack Overflow用户

发布于 2010-12-31 09:23:08

您可能希望使用类似以下内容的内容:

代码语言:javascript
复制
blank_image = Image.new("RGB", (800, 600))

这将在内存中创建一个新区域,您可以在其中生成图像。然后你就可以把你的图片粘贴到里面了。

然后,您需要稍后使用以下命令再次保存它:

代码语言:javascript
复制
blank_image.save("blank.jpg")
票数 12
EN

Stack Overflow用户

发布于 2010-12-31 12:59:35

阅读错误消息:

代码语言:javascript
复制
AttributeError: 'NoneType' object has no attribute 'paste'

这意味着您试图在NoneType类型的对象上调用.paste,例如在None对象上。

Image.paste返回None。您不能像这样将调用“链接”在一起,除非函数是专门为支持它而设计的,而Image.paste并非如此。(对这类事情的支持是通过使用函数return self来实现的。您会得到一个关于NoneType的错误,因为该函数不返回任何内容,如果没有显式返回任何内容,则默认情况下,Python中的所有内容都返回None。)这被认为是Pythonic式的:方法要么返回一个新值,要么修改self并返回None。因此,当函数有副作用时,就不会使用所谓的“流畅接口”- Pythonistas认为这是有害的。返回None是函数有副作用的警告。:)

只需执行四个独立的.paste调用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4567409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档