如何实现PIL对上传到Django的图片进行处理并保存-创新互联

这篇文章给大家分享的是有关如何实现PIL对上传到Django的图片进行处理并保存的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

创新互联建站是一家专业提供渝水企业网站建设,专注与成都网站制作、成都网站设计、外贸营销网站建设H5高端网站建设、小程序制作等业务。10年已为渝水众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

1. 介绍

上传的图片文件:如

pic = request.FILES["picture"]
# pic是  类型的数据

# 而pillow的Image.open("./xxx.jpg") 则是:

 类型的数据

# 问题是如何把InMemoryUploadedFile转化为PIL类型,并且处理之后再转回InMemoryUploadedFile,并save

2. 把InMemoryUploadedFile转化为PIL类型

from PIL import Image

pic = request.FILES["picture"]
im_pic = Image.open(pic)
# 这样就把InMemoryUploadedFile转化为了PIL类型数据,pic是InMemoryUploadedFile,im_pic是PIL类型

3. 处理PIL类型的图片数据

w, h = im_pic.size
if w >= h:
  w_start = (w-h)*0.618
  box = (w_start, 0, w_start+h, h)
  region = im_pic.crop(box)
else:
  h_start = (h-w)*0.618
  box = (0, h_start, w, h_start+w)
  region = im_pic.crop(box)

# region就是PIL处理后的正方形了

4. 将处理后的PIL类型转化为InMemoryUploadedFile类型

from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile

// 先保存到磁盘io
pic_io = BytesIO()
region.save(pic_io, im_pic.format)
// 再转化为InMemoryUploadedFile数据
pic_file = InMemoryUploadedFile(
  file=pic_io,
  field_name=None,
  name=pic.name,
  content_type=pic.content_type,
  size=pic.size,
  charset=None
)

pic_file 就是region转化后的InMemoryUploadedFile了

5. 保存InMemoryUploadedFile到数据库

from ./models import Picture

p = Picture(picture=pic_file)
p.save()

感谢各位的阅读!关于“如何实现PIL对上传到Django的图片进行处理并保存”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


文章标题:如何实现PIL对上传到Django的图片进行处理并保存-创新互联
文章路径:http://pwwzsj.com/article/doijdc.html