You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:43:09