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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
教大家使用Python SqlAlchemy
Feb 12 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
python绘制多个子图的实例
Jul 07 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
python 简易计算器程序,代码就几行
2009/08/29 Python
zbar解码二维码和条形码示例
2014/02/07 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
Python中DJANGO简单测试实例
2015/05/11 Python
详解Django框架中的视图级缓存
2015/07/23 Python
python从入门到精通(DAY 3)
2015/12/20 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
广州盈通面试题
2015/12/05 面试题
网上书店创业计划书
2014/01/12 职场文书
七一讲话心得体会
2014/09/05 职场文书
个人自我剖析材料
2014/09/30 职场文书
小学教学工作总结2015
2015/05/13 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
高一英语教学反思
2016/03/03 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android