PIL对上传到Django的图片进行处理并保存的实例
作者:smartwu_sir 发布时间:2023-04-03 12:40:04
标签:PIL,上传,Django,图片
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()
来源:https://blog.csdn.net/smartwu_sir/article/details/80085603
0
投稿
猜你喜欢
- 为什么我写ASP分页教程要提到AJAX呢,因为我们要多练习一下编程过程中,结构化的重要性. 再加上很多朋友对分页感到很高深,所以一直都不敢去
- 本文讲述了Symfony核心类。分享给大家供大家参考,具体如下:Symfony的核心类Symfony的MVC方式使用了一些你以后会经常碰到的
- pycharm简介PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语
- 我们都有过函数调用的经历,那么call调用类实例的过程就跟函数很相似。类的用法很多人都知道了,类实例又是什么呢?可以把类看成一个设计图,类实
- 本文所述为Python3的基本运算符,是学习Python必须掌握的,共享给大家参考一下。具体如下:首先Python中的运算符大部分与C语言的
- 本次做一个最简单的贪食蛇雏形游戏,就是一个小蛇在画面上移动,我们可以控制蛇的移动方向,但是不能吃东西,蛇不会长大。但是基础的有了,完整版的贪
- 最近学了一点点python爬虫的知识,面向百度编程爬了一本小说之后感觉有点不满足,于是突发奇想尝试爬一本漫画下来看看。一、效果展示首先是我们
- 从最基础的说起。本教程中,所有IE 均指 WindowXP + IE 6.0, 所有 FF 均指 FF 1.5。1. 不用编程的部分1.1
- 其实发这篇博感觉并没有什么用,太简单了,会的人不屑看,不会的人自已动动脑子也想到了。但是看着自已的博客已经这么久没更,真心疼~。粗略算下一篇
- 如何显示数据库中的图片和超级链接?代码见下:<% set conn=server.creatobject(&quo
- 原由定期更换密码是一种非常重要的安全措施,这种做法可以有效地保护你的账户和个人信息不受黑客和网络攻击者的侵害。密码泄露是一个非常普遍的问题,
- 这次做一个比较贴近我实际的东西:python分析作业提交情况。要求: 将服务器中交作业的学生(
- 1.搭建环境:系统版本:Linux centos-linux.shared 3.10.0-123.el7.x86_64 #1 SMP Mon
- QThread是Qt的线程类中最核心的底层类。由于PyQt的的跨平台特性,QThread要隐藏所有与平台相关的代码要使用的QThread开始
- 一、函数的变量作用域和可见性1.全局变量在main函数执行之前初始化,全局可见2.局部变量在函数内部或者if、for等语句块有效,使用之后外
- 第四篇《WEB标准能有多难?》专栏文章将结束关于文本部分的XHTML的讲解。那么这篇主讲的内容涉及链接、标题、插入、删除、上下标、分割线、换
- seed() 设置生成随机数用的整数起始值。调用任何其他random模块函数之前调用这个函数。语法以下是seed()方法的语法:
- 训练好了model后,可以通过python调用caffe的模型,然后进行模型测试的输出。本次测试主要依靠的模型是在caffe模型里面自带训练
- 本文讲述了Python在windows下打印彩色字体的方法。分享给大家供大家参考,具体如下:########################
- 1. base64编码简介用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,