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创建和删除目录的方法
Apr 29 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
Jun 13 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
Python对excel文档的操作方法详解
Dec 10 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
django中forms组件的使用与注意
Jul 08 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
python中可以声明变量类型吗
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
php stream_get_meta_data返回值
2013/09/29 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
J2EE模式面试题
2016/10/11 面试题
控制工程专业个人求职信
2013/09/25 职场文书
安全大检查反思材料
2014/01/31 职场文书
运动会稿件300字
2014/02/14 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
《石榴》教学反思
2014/03/02 职场文书
初中作文评语大全
2014/04/23 职场文书
社区活动策划方案
2014/08/21 职场文书
大学生见习报告总结
2014/11/04 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
运动员加油词
2015/07/18 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server