【发布时间】:2018-08-10 09:46:43
【问题描述】:
我正在使用qrcode 生成二维码。当买了票,或者当买的是真的时,我想生成一个二维码图像并使用 PIL 进行一些更改。最后将修改后的画布保存到模型的Image字段中。
class Ticket(models.Model):
booked_at = models.DateTimeField(default=timezone.now)
qrcode_file = models.ImageField(upload_to='qrcode', blank=True, null=True)
bought = models.BooleanField(default=False)
def save(self, *args, **kwargs):
if self.bought:
...
...
qrcode_img = qrcode.make('some data')
canvas = Image.new('RGB', (total_width, total_height), 'white')
draw = ImageDraw.Draw(canvas)
position = (left, top)
canvas.paste(qrcode_img, position)
self.qrcode_file = canvas
self.booked_at = timezone.now()
super(Ticket, self).save(*args, **kwargs)
canvas.close()
qrcode_img.close()
else:
self.booked_at = timezone.now()
super(Ticket, self).save(*args, **kwargs)
但这会引发错误:
AttributeError: 'Image' 对象没有属性 '_committed'
如何将生成的 PIL 图像保存到 django 中的 ImageField 中?
【问题讨论】:
-
这条线
canvas = Image.new("RGB", (total_width, total_height), white)请问“图片”是从哪里来的? -
@Martins 来自 PIL
-
好吧,看完文档后才意识到。
标签: python django python-3.x python-imaging-library