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字符串中的单双引
Feb 16 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
Apr 11 Python
Python自定义简单图轴简单实例
Jan 08 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
python设定并获取socket超时时间的方法
Jan 12 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
python中如何使用虚拟环境
Oct 14 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
php邮件发送,php发送邮件的类
2011/03/24 PHP
PHP学习之正则表达式
2011/04/17 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用python实现个性化词云的方法
2017/06/16 Python
python unittest实现api自动化测试
2018/04/04 Python
django项目搭建与Session使用详解
2018/10/10 Python
python找出完数的方法
2018/11/12 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
python扫描线填充算法详解
2020/02/19 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
高中生职业规划范文
2014/03/09 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
怎样写辞职信
2015/02/27 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
个人求职信格式范文
2015/03/20 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS