PIL调用paste方法报can only concatenate tuple (not "int")错误如何修复
报错原因
TypeError: can only concatenate tuple (not "int") to tuple
该错误是调用PIL.Image.paste()方法时,第二个定位参数box的格式不符合要求导致的:你传入的是嵌套两个坐标元组的列表,而PIL的paste方法仅支持两种box格式:
- 仅包含左上角坐标的二元组:
(x, y),此时会自动按照被粘贴图片的尺寸匹配粘贴区域 - 包含区域四个边界坐标的四元组:
(left, top, right, bottom),此时要求被粘贴图片尺寸和该区域尺寸完全一致
修复方法
因为你的小图预设尺寸和每个粘贴块的尺寸完全匹配,直接传入左上角二元组即可,把循环内的paste代码修改为:
bg.paste(img1, (rectangle_x, rectangle_y), img1)
如果需要明确指定粘贴区域边界,可以修改为四元组格式:
bg.paste(img1, (rectangle_x, rectangle_y, rectangle_x + rectangle_width, rectangle_y + rectangle_height), img1)
完整修复后代码
import random import uuid from PIL import Image run_id = uuid.uuid1() print(f'Processing run_id: {run_id}') img1 = Image.open('1.png') # 可选:如果你的1.png尺寸不是160*160,可以加一行resize保证尺寸匹配 # img1 = img1.resize((160, 160)) bg = Image.new('RGB', (1600, 1600)) rectangle_width = 160 rectangle_height = 160 for i in range(10): for j in range(10): rectangle_x = i*160 rectangle_y = j*160 # 修复后的paste调用 bg.paste(img1, (rectangle_x, rectangle_y), img1) bg.show()
补充说明
如果你的1.png不带透明通道,可以删掉paste调用的第三个蒙版参数,运行效果不会有差异。
内容的提问来源于stack exchange,提问作者MANISH KUMAR
相关产品推荐
相关产品推荐

