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根据出生日期获得年龄的方法
Mar 31 Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 Python
python TCP Socket的粘包和分包的处理详解
Feb 09 Python
Python实现端口检测的方法
Jul 24 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 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/10/09 PHP
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
Vuex提升学习篇
2018/01/11 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
Python实现的合并两个有序数组算法示例
2019/03/04 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
Python json格式化打印实现过程解析
2020/07/21 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
精伦电子Java笔试题
2013/01/16 面试题
竞争上岗演讲稿
2014/01/05 职场文书
小学生评语大全
2014/04/18 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python