Python Django在不同的模型字段上保存图像
我有一个叫Picture的模型。将图像上载到此模型时,将在保存前自动重新调整图像大小 我的主要目标是将上传的图像重新调整为两个独立的图像。所以我可以把它用于不同的用途,比如小图片和大图片。所以我为实现这个目标所做的是创建另一个称为“小”的领域。它代表小图片 我的模型下面有两个函数,分别是save和small。这些功能将自动重新调整图像大小 我的计划是,当我上传一张图片到模型上。我的“保存”功能将自动调整图像大小并将其保存到“图像”文件夹中,但如何让我的小功能从“图像”字段抓取该图像,以便它可以调整图像大小并将其保存到我的小字段中 总而言之,它只是检索一个上传图像并在两个字段上调整图像的大小Python Django在不同的模型字段上保存图像,python,django,django-signals,django-models,Python,Django,Django Signals,Django Models,我有一个叫Picture的模型。将图像上载到此模型时,将在保存前自动重新调整图像大小 我的主要目标是将上传的图像重新调整为两个独立的图像。所以我可以把它用于不同的用途,比如小图片和大图片。所以我为实现这个目标所做的是创建另一个称为“小”的领域。它代表小图片 我的模型下面有两个函数,分别是save和small。这些功能将自动重新调整图像大小 我的计划是,当我上传一张图片到模型上。我的“保存”功能将自动调整图像大小并将其保存到“图像”文件夹中,但如何让我的小功能从“图像”字段抓取该图像,以便它可以调
class Picture(models.Model):
user = models.ForeignKey(User)
small = models.ImageField(upload_to="small/",blank=True,null=True)
image = models.ImageField(upload_to="images/",blank=True)
def save(self , force_insert=False,force_update=False):
super (Picture,self).save(force_insert,force_update)
pw = self.image.width
ph = self.image.height
mw = 500
mh = 500
if (pw > mw) or (ph > mh):
filename = str(self.image.path)
imageObj = img.open(filename)
ratio = 1
if ( pw > mw):
ratio = mw / float(pw)
pw = mw
ph = int(math.floor(float(ph)* ratio))
if ( ph > mh):
ratio = ratio * ( mh /float(ph))
ph = mh
pw = int(math.floor(float(ph)* ratio))
imageObj = imageObj.resize((pw,ph),img.ANTIALIAS)
imageObj.save(filename)
def save(self , force_insert=False,force_update=False):
super (Picture,self).save(force_insert,force_update)
pw = self.image.width
ph = self.image.height
mw = 300
mh = 300
if (pw > mw) or (ph > mh):
filename = str(self.image.path)
imageObj = img.open(filename)
ratio = 1
if ( pw > mw):
ratio = mw / float(pw)
pw = mw
ph = int(math.floor(float(ph)* ratio))
if ( ph > mh):
ratio = ratio * ( mh /float(ph))
ph = mh
pw = int(math.floor(float(ph)* ratio))
imageObj = imageObj.resize((pw,ph),img.ANTIALIAS)
imageObj.save(filename)
如果这没有意义,请提醒我,以便我可以修改它您可以创建自定义字段(继承ImageField)或创建预保存信号来处理上载
from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import MyModel
class MyModel(models.Model):
# other fields
image = MyCustomImageField(sizes=(('small', '300x300'), ('large', '500x500')))
信号
@receiver(pre_save, sender=MyModel)
def process_picture(sender, **kwargs):
# do resizing and storage stuff
更多关于和习惯
这只是一个用作设置的属性,用于定义要创建的缩略图大小。创建缩略图只需要一个函数。看看我发布的工作示例。@Jacob,你正在学习的其实是Python,Django只是使用Python代码。这是一个很好的文档,如果你复制并粘贴它,它可能会开箱即用。仔细阅读它,您应该会有一个基本的理解。字段“只是”一个python类。在示例中定义了自定义字段。让我们来看看为什么不使用它?@Darwin回答得很好,