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语言的12个基础知识点小结
Jul 10 Python
Python下的twisted框架入门指引
Apr 15 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
tensorflow更改变量的值实例
Jul 30 Python
python读写csv文件方法详细总结
Jul 05 Python
通过python改变图片特定区域的颜色详解
Jul 15 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 16 Python
python爬虫scrapy基本使用超详细教程
Feb 20 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 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无限分类的类
2007/01/02 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
一个很不错的PHP翻页类
2009/06/01 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
北承题目(C++)
2012/05/16 面试题
有兼职工作经历的简历自我评价
2014/03/07 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
后进生评语大全
2015/01/04 职场文书
爱心募捐通知范文
2015/04/27 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python