首页 > 编程 > Python > 正文

PIL对上传到Django的图片进行处理并保存的实例

2019-11-25 12:04:40
字体:
来源:转载
供稿:网友

1. 介绍

上传的图片文件:如

pic = request.FILES["picture"]# pic是 <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> 类型的数据# 而pillow的Image.open("./xxx.jpg") 则是:<class 'PIL.JpegImagePlugin.JpegImageFile'> 类型的数据# 问题是如何把InMemoryUploadedFile转化为PIL类型,并且处理之后再转回InMemoryUploadedFile,并save

2. 把InMemoryUploadedFile转化为PIL类型

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

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

w, h = im_pic.sizeif 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 BytesIOfrom django.core.files.uploadedfile import InMemoryUploadedFile// 先保存到磁盘iopic_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 Picturep = Picture(picture=pic_file)p.save()

以上这篇PIL对上传到Django的图片进行处理并保存的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表