Не удается определить размер региона; используйте поле из 4 элементов

Я пытаюсь создать QR-код и использую pillow=11.1.0. Вот код для создания и сохранения QR-кода:

 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)
        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) 

Однако, когда я сохраняю его, я сталкиваюсь со следующей ошибкой:

cannot determine region size; use 4-item box

Строка, о которой идет речь, выглядит следующим образом:

canvas.paste(im=qrcode_img, box=(0,0))

(Как минимум) две ошибки:

  • поле должно состоять из четырех кортежей; и
  • цвет должен быть int или 3-кортежным:
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)
    canvas = Image.new('RGB', (290, 290), (255, 255, 255))
    draw = ImageDraw.Draw(canvas)
    canvas.paste(im=qrcode_img, box=(0, 0, 290, 290))
    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)

Тем не менее, проактивный рендеринг растровых изображений, вероятно, неэффективен. Вы можете сгенерировать (векторизованный) QR-код по запросу. Смотрите, например, этот ответ.

Вернуться на верх