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


Posted in Python onAugust 07, 2019

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 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的图片进行处理并保存的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
Python 3中的yield from语法详解
Jan 18 Python
Python中enumerate函数代码解析
Oct 31 Python
python assert的用处示例详解
Apr 01 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
python数据类型强制转换实例详解
Jun 22 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 Python
Python实现简单的2048小游戏
Mar 01 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
Aug 07 #Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 #Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 #Python
Python学习笔记之文件的读写操作实例分析
Aug 07 #Python
详解python中__name__的意义以及作用
Aug 07 #Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 #Python
Python编程学习之如何判断3个数的大小
Aug 07 #Python
You might like
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
Python中tell()方法的使用详解
2015/05/24 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
python输出带颜色字体实例方法
2019/09/01 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
如何进行Linux分区优化
2013/02/12 面试题
读书心得体会
2013/12/28 职场文书
考试不及格的检讨书
2014/01/22 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
python实现批量移动文件
2021/04/05 Python
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js