Python PIL粘贴

时间:2013-10-21 04:36:27

标签: python python-imaging-library

我想将一堆图像与PIL粘贴在一起。出于某种原因,当我运行第blank.paste(img,(i*128,j*128))行时,我收到以下错误:ValueError: cannot determine region size; use 4-item box

我试过搞乱它并使用一个像4个元素一样的元组(例如(128,128,128,128))但它给了我这个错误:SystemError: new style getargs format but argument is not a tuple

每张图片都是128x,命名风格为“x_y.png”,其中x和y为0到39.我的代码如下。

from PIL import Image

loc = 'top right/'
blank = Image.new("RGB", (6000,6000), "white")

for x in range(40):
    for y in reversed(range(40)):
        file = str(x)+'_'+str(y)+'.png'
        img = open(loc+file)
        blank.paste(img,(x*128,y*128))

blank.save('top right.png')

我怎样才能让它发挥作用?

3 个答案:

答案 0 :(得分:5)

这对我有用,我正在使用Odoo v9而且我有枕头4.0。

我用ubuntu在我的服务器上完成了步骤:

# pip uninstall pillow
# pip install Pillow==3.4.2
# /etc/init.d/odoo restart

答案 1 :(得分:4)

您没有正确加载图片。内置函数open只打开一个新的文件描述符。要使用PIL加载图像,请改用Image.open

from PIL import Image
im = Image.open("bride.jpg") # open the file and "load" the image in one statement

如果您有理由使用内置打开,请执行以下操作:

fin = open("bride.jpg") # open the file
img = Image.open(fin) # "load" the image from the opened file

使用PIL,“加载”图像意味着读取图像标题。 PIL很懒,所以在需要之前它不会加载实际的图像数据。

另外,请考虑使用os.path.join而不是字符串连接。

答案 2 :(得分:0)

对我来说,以上方法无效。

检查 image.py 后,我发现image.paste(color)还需要一个类似image.paste(color, mask=original)的参数。通过将其更改为以下内容,对我来说效果很好:

image.paste(color, box=(0, 0) + original.size)