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 相关文章推荐
windows下ipython的安装与使用详解
Oct 20 Python
详解python之简单主机批量管理工具
Jan 27 Python
Python实现购物车购物小程序
Apr 18 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
Python函数参数操作详解
Aug 03 Python
Python Pandas 箱线图的实现
Jul 23 Python
pandas 如何分割字符的实现方法
Jul 29 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Python新手学习装饰器
Jun 04 Python
用Python提取PDF表格的方法
Apr 11 Python
判断Python中的Nonetype类型
May 25 Python
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 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连接mssql:pdo odbc sql server
2011/07/20 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
js保存当前路径(cookies记录)
2010/12/14 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
基于PyTorch中view的用法说明
2021/03/03 Python
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
机械工程师求职自我评价
2013/09/23 职场文书
室内设计专业个人的自我评价
2013/10/19 职场文书
产品工艺师的岗位职责
2013/11/15 职场文书
酒店节能减排方案
2014/05/26 职场文书
学校四群教育实施方案
2014/06/12 职场文书
社区清明节活动总结
2014/07/04 职场文书
2015年科协工作总结
2015/05/19 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
Java无向树分析 实现最小高度树
2022/04/09 Javascript