Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据输入调整图像大小_Python_Django - Fatal编程技术网

Python 根据输入调整图像大小

Python 根据输入调整图像大小,python,django,Python,Django,我已经定义了一些模型,我正在尝试编写一个create\u image()方法。我不希望图像大于960x720(或720x960)。我试着跟随其他人,但我不能完全正确。请看我的代码,告诉我可以做什么不同 型号.py 来自django.db导入模型的 从home.models导入timestamesedmodel 从.managers导入相册管理器、图像管理器 类相册(TimestampedModel): title=models.CharField(最大长度=255) objects=AlbumM

我已经定义了一些模型,我正在尝试编写一个
create\u image()
方法。我不希望图像大于960x720(或720x960)。我试着跟随其他人,但我不能完全正确。请看我的代码,告诉我可以做什么不同

型号.py

来自django.db导入模型的

从home.models导入timestamesedmodel
从.managers导入相册管理器、图像管理器
类相册(TimestampedModel):
title=models.CharField(最大长度=255)
objects=AlbumManager()
类映像(TimestampedModel):
image=models.ImageField(上传到=“img/%Y/%m/%d/”)
相册=models.ForeignKey(相册,on_delete=models.CASCADE)
对象=图像管理器()
managers.py

来自django.db导入模型的

类管理器(models.Manager):
def创建_相册(自我,请求):
从。模型导入图像
#数据收集
title=request.POST.get('title','')
images=request.FILES.getlist('images',[])
#验证
错误=[]
如果不是标题:
错误。追加('请输入标题')
如果不是图像:
错误。追加('请至少上载一个图像')
#返回故障
如果出现错误:
返回(False,错误)
#专辑创作
相册=self.create(标题=title)
#形象创造
对于图像中的图像:
Image.objects.create_Image(Image=Image,album=album)
#回归成功
len_images=len(图像)
return(True,'您已成功将%d个图像%s上载到相册\'%s\'。%(len_图像,'如果len_图像==1个其他的's',标题))
类ImageManager(models.Manager):
def创建_图像(自我,**kwargs):
从io导入StringIO
从PIL导入图像
#验证(引发错误)
如果“图像”不在kwargs中,“相册”不在kwargs中:
raise TypeError(“create_image()缺少2个必需的关键字参数‘image’和‘album’”)
elif“图像”不在kwargs中:
raise TypeError(“create_image()缺少1个必需的关键字参数‘image’”)
elif“相册”不在kwargs中:
raise TypeError(“create_image()缺少1个必需的关键字参数'album'”)
#如有必要,缩小图像比例
image=image.open(kwargs['image'])
imagefile=StringIO(图像)
宽度,高度=image.size
如果宽度>高度:
最大宽度=浮动(960)
最大高度=浮动(720)
比率=最小值(最大宽度/宽度,最大高度/高度)
宽度,高度=(宽度*比率,高度*比率)
elif宽度<高度:
最大宽度=浮动(720)
最大高度=浮动(960)
比率=最小值(最大宽度/宽度,最大高度/高度)
宽度,高度=(宽度*比率,高度*比率)
其他:
最大宽度=浮动(720)
比率=最大宽度/宽度
宽度,高度=(宽度*比率,高度*比率)
#文件操作
imagefile=StringIO()
resizedImage.save(图像文件'JPEG')
filename=hashlib.md5(imagefile.getvalue()).hexdigest()+'.jpeg'
imagefile=open(os.path.join('/tmp',filename),'w')
resizedImage.save(文件名为“JPEG”)
#imagefile=open(os.path.join('/tmp',filename),'r')
#content=django.core.files.File(imagefile)
#返回图像对象
返回self.create(image=resizedImage,album=kwargs['album'])
编辑1

下面是我收到的最新错误消息:

内部服务器错误:/images/create/
回溯(最近一次呼叫最后一次):
文件“/home/matt/Repositories/mtm/env/lib/python3.5/site packages/django/core/handlers/exception.py”,第34行,在内部
响应=获取响应(请求)
文件“/home/matt/Repositories/mtm/env/lib/python3.5/site packages/django/core/handlers/base.py”,第115行,在“获取”响应中
response=self.process\u异常\u由\u中间件(e,请求)
文件“/home/matt/Repositories/mtm/env/lib/python3.5/site packages/django/core/handlers/base.py”,第113行,在“get”响应中
响应=包装的回调(请求,*回调参数,**回调参数)
文件“/home/matt/Repositories/mtm/images/views.py”,第16行,在create中
有效,响应=Album.objects.create\u Album(请求)
文件“/home/matt/Repositories/mtm/images/managers.py”,第29行,在创建相册中
Image.objects.create_Image(Image=Image,album=album)
文件“/home/matt/Repositories/mtm/images/managers.py”,第51行,在create_image中
imagefile=StringIO(图像)
TypeError:初始值必须是str或None,而不是PngImageFile
编辑2

视图.py

从django.shortcuts导入渲染,重定向
从django.http导入HttpResponseBadRequest
从django.contrib导入消息
从。模型导入相册
def创建(请求):
if request.method!='邮政‘’
返回HttpResponseBadRequest()
有效,响应=Album.objects.create\u Album(请求)
如果无效:
对于响应中的错误:
messages.error(请求、错误)
其他:
消息。成功(请求、响应)
返回重定向('用户:索引')
相册管理器(managers.py)


见上文。

我认为这涵盖了您的所有情况:

# You can resize your image in your forms.py or in the similar manner to your ImageManager

from PIL import Image

class ImageForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ImageForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Image
        fields = ('__all__')


    def save(self, request, commit=True):
        instance = super(ImageForm, self).save(commit=False)
        image = Image.open(instance.image)
        resized_image = image.resize((720, 960), Image.ANTIALIAS)
        resized_image.save('project_app/static/img/'+instance.image.name)
        return instance  
从io导入字节io
从PIL导入图像
类映像(TimestampedModel):
image=models.ImageField(上传到=“img/%Y/%m/%d/”)
相册=models.ForeignKey(相册,on_delete=models.CASCADE)
def保存(自身、*args、**kwargs):
如果自我形象:
self.resize_image()
super().save(*args,**kwargs)
def resize_图像(自身):
img=Image.open(self.Image).convert('RGB')
宽度、高度=img.size
#仅在出现以下情况时调整图像大小
如果(宽度>=高度和(宽度>960或高度>720))或(高度