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基础教程之循环介绍
Aug 29 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
Apr 24 Python
Python中__new__与__init__方法的区别详解
May 04 Python
python基于右递归解决八皇后问题的方法
May 25 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
python实现dijkstra最短路由算法
Jan 17 Python
python字符串Intern机制详解
Jul 01 Python
Python try except finally资源回收的实现
Jan 25 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
Python3.2中Print函数用法实例详解
2015/05/19 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
公务员培训心得体会
2013/12/28 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
优质服务活动实施方案
2014/05/02 职场文书
毕业横幅标语
2014/10/08 职场文书
运动会开幕式主持词
2015/07/01 职场文书
新郎婚礼致辞
2015/07/27 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server