Не удается определить размер региона; используйте поле из 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-код по запросу. Смотрите, например, этот ответ.