使用Pillow 11.1.0生成二维码报错:cannot determine region size; use 4-item box
解决Pillow粘贴二维码时的"cannot determine region size; use 4-item box"错误
问题原因
qrcode.make()默认生成的是1位(黑白单色)的PIL Image对象,而你创建的canvas是RGB模式。当两种模式不匹配时,仅传入左上角坐标(0,0)进行粘贴,Pillow无法正确识别待粘贴图像的区域尺寸,从而抛出该错误。
修复方案
将二维码图像转换为与canvas一致的RGB模式即可解决问题,修改后的代码如下:
def save(self, *args, **kwargs): ## TODO:Generate QR Code # qr_code_url = f"{os.environ['HOST_URL']}/inventory/{self.part_type_id}" qrcode_img = qrcode.make(self.part_number).convert('RGB') # 新增模式转换 canvas = Image.new('RGB', (290, 290), 'white') draw = ImageDraw.Draw(canvas) canvas.paste(im=qrcode_img, box=(0,0)) buffer = BytesIO() canvas.save(buffer, 'PNG') self.qr_code_data.save(f'{self.part_name}.png', File(buffer), save=False) canvas.close() super().save(*args, **kwargs)
补充说明
如果需要让二维码完全适配290x290的canvas尺寸,可以在模式转换后添加resize操作:
qrcode_img = qrcode.make(self.part_number).convert('RGB').resize((290, 290))
内容的提问来源于stack exchange,提问作者Jacob Mutale
相关产品推荐
相关产品推荐

