我有个问题。是否可以从一个图像中保存具有其他唯一名称的图像。
我得到了一个默认的图像,它位于invitation/defaut.png
中。
我使用的表单只有一个字段专用于nom
我想保存这张图片,用笔名,用不同的名字。
例如:
如果name louis=>defaut_randomletters.png
如果name mike=>defaut_randomletters.png
我面临的问题是,所有的文字都保存在同一张图片上。
class Invitation(models.Model):
nom = models.CharField(max_length=200)
user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='invitation_user')
image = models.ImageField(upload_to='invitation/', default='invitation/defaut.png')
slug = models.SlugField(max_length=200, editable=False, unique=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = self.nom
super(Invitation, self).save(*args, **kwargs)
#self.image.path = self.image.path.rsplit("/", 1)[0] + "/defaut_randomletters.png"
img = Image.open(os.path.join(settings.BASE_DIR, self.image.path))
#img = Image.open(self.image.path)
draw = ImageDraw.Draw(img)
path_to_media_popstick = os.path.join(settings.BASE_DIR, 'media/font/gillsans.ttf')
path_to_media_emo = os.path.join(settings.BASE_DIR, 'media/font/Symbola.ttf')
#fnt = ImageFont.truetype(path_to_media_emo, 50)
fnt = ImageFont.truetype(path_to_media_emo, size=50, layout_engine=ImageFont.LAYOUT_RAQM)
font = ImageFont.truetype(path_to_media_popstick, 200)
draw.text((50, 200),self.nom,(255,255,255),font=font)
img.save(self.image.path + secrets.token_urlsafe(12) + ".png")
super(Invitation, self).save(*args, **kwargs)
编辑:
我试过多种方法。多亏了这种方式,我可以创建一个新名称(img.save(self.image.path + secrets.token_urlsafe(12) + ".png"
(的新图像。它正确地保存在正确的文件夹中,但这与模型无关。
例如,如果我创建Nico,这将创建一个新的图像defaut.pngIZ29GUoOPVF6Q4e.png->但在型号上我会有:
图片元素:invitation/defat.png(defaut.pnggIZ29GUoOPVF6Q4e.png未链接到我刚刚创建的模型(
因为您正在将图像写入同一路径self.image.path
。更新路径的文件名部分,如
self.image.path = self.image.path.rsplit("/", 1)[0] + "/defaut_randomletters.png"
并且CCD_ 5也将更新后的CCD_。