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编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
python安装与使用redis的方法
Apr 19 Python
win10系统中安装scrapy-1.1
Jul 03 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
python3 xpath和requests应用详解
Mar 06 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
python为什么要安装到c盘
Jul 20 Python
python中xlutils库用法浅析
Dec 29 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
无阻塞加载脚本分析[全]
2011/01/20 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
大学军训感言1500字
2014/03/09 职场文书
《花木兰》教学反思
2014/04/09 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
公司离职证明标准格式
2014/11/18 职场文书
订货会邀请函
2015/01/31 职场文书
紧急通知
2015/04/17 职场文书
2015年计划生育责任书
2015/05/08 职场文书
刮痧观后感
2015/06/05 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS