Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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 将通过PIL创建的图像保存到django模型_Python_Django_Django Models_Python Imaging Library - Fatal编程技术网

Python 将通过PIL创建的图像保存到django模型

Python 将通过PIL创建的图像保存到django模型,python,django,django-models,python-imaging-library,Python,Django,Django Models,Python Imaging Library,我已成功创建并旋转了一个图像,该图像已通过电子邮件上传到我服务器上的一个目录,使用以下代码: image = ContentFile(b64decode(part.get_payload())) im = Image.open(image) tempfile = im.rotate(90) tempfile.save("/srv/www/mysite.com/public_html/media/images/rotate.jpg", "JPEG")

我已成功创建并旋转了一个图像,该图像已通过电子邮件上传到我服务器上的一个目录,使用以下代码:

      image = ContentFile(b64decode(part.get_payload()))
      im = Image.open(image)
      tempfile = im.rotate(90)
      tempfile.save("/srv/www/mysite.com/public_html/media/images/rotate.jpg", "JPEG")
      img = Photo(user=user)
      img.img.save('rotate.jpg', tempfile)
      img.save()
       image = ContentFile(b64decode(part.get_payload()))
       im = Image.open(image)
       tempfile = im.rotate(270)
       tempfile_io =StringIO.StringIO()
       tempfile.save(tempfile_io, format='JPEG')
       image_file = InMemoryUploadedFile(tempfile_io, None, 'rotate.jpg','image/jpeg',tempfile_io.len, None)
       img = Photo(user=user)
       img.img.save('rotate.jpg', image_file)
       img.save()

旋转后的图像存在于目录中,但是当我尝试将该图像添加到我的模型时,它不会保存。我错过了什么?非常感谢您的帮助。

我用以下代码解决了这个问题:

      image = ContentFile(b64decode(part.get_payload()))
      im = Image.open(image)
      tempfile = im.rotate(90)
      tempfile.save("/srv/www/mysite.com/public_html/media/images/rotate.jpg", "JPEG")
      img = Photo(user=user)
      img.img.save('rotate.jpg', tempfile)
      img.save()
       image = ContentFile(b64decode(part.get_payload()))
       im = Image.open(image)
       tempfile = im.rotate(270)
       tempfile_io =StringIO.StringIO()
       tempfile.save(tempfile_io, format='JPEG')
       image_file = InMemoryUploadedFile(tempfile_io, None, 'rotate.jpg','image/jpeg',tempfile_io.len, None)
       img = Photo(user=user)
       img.img.save('rotate.jpg', image_file)
       img.save()
我在这里找到了答案。完美地工作

来自django.db导入模型的

from.abstract\u类导入DateTimeCreatedModified
从PIL导入图像
从io导入字节io
从django.core.files.base导入内容文件
从枚举导入枚举
类MediaSize(枚举):
#大小基本文件名
默认值=((10801080),“总线默认值”)
中等=((612612),“中等总线”)
缩略图=((161161),“总线缩略图”)
类媒体(DateTimeCreatedModified):
#原始图像。
original=models.ImageField()
#调整大小的图像。。。
默认值=models.ImageField()
medium=models.ImageField()
缩略图=models.ImageField()
def大小调整img(自身、img_大小):
img:Image.Image=Image.open(self.original)
img.缩略图(img_大小、图像、抗锯齿)
outputIO=BytesIO()
保存(输出,格式=img.format,质量=100)
返回输出,img
def HandlerResize(自身,mediaSize:mediaSize):
imgSize=mediaSize.value[0]
imgName=mediaSize.value[1]
输出,img=self.resizeImg(imgSize)
返回{
#文件不会被覆盖
#因为'AWS\u S3\u FILE\u OVERWRITE=False`
#在“settings.py”中设置。
'name':f'{imgName}.{img.format}',
“内容”:内容文件(outputIO.getvalue()),
“保存”:False,
}
def保存(自身,**kwargs):
如果不是self.default:
self.default.save(
**self.handleResize(MediaSize.DEFAULT)
)
如果不是自媒体:
自我保存(
**self.handleResize(MediaSize.MEDIUM)
)
如果不是self.缩略图:
自我保存(
**self.handleResize(MediaSize.缩略图)
)
super().save(**kwargs)

是否出现特定错误?你能分享一下你对照片的模型定义吗?我很确定这不是模型。如果我将“img.img.save('rotate.jpg',tempfile')中的“tempfile”替换为“image”,则会正确保存。因此,在保存图像后,我似乎无法正确访问新创建和旋转的图像文件。如果保存的是
im
,而不是
tempfile
,是否会出现同样的问题?是的,尝试了一些方法,但似乎仍然无法使其正常工作。好像图像不是一个有效的文件对象。恐怕我没有很多好主意。你现在可以绕道而行了。当
打开
时,关闭临时文件并使用路径保存它。如果你想提高效率,那就不太好,但应该作为权宜之计。您看过
issubclass
tempfile
上的类似内容了吗?能否输入您的导入,以便我们知道您从哪里获取了所有必需的类,提前感谢!注意:从python3变更日志中:StringIO和cStringIO模块已经消失。相反,请导入io模块,并分别对文本和数据使用io.StringIO或io.BytesIO。