PIL对上传到Django的图片进行处理并保存的实例

作者:smartwu_sir 时间:2023-04-03 12:40:04 

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

标签:PIL,上传,Django,图片
0
投稿

猜你喜欢

  • mysql连接查询详解

    2024-01-15 16:42:11
  • 常见SQL Server 2000漏洞及其相关利用

    2007-10-01 14:45:00
  • mysql8.0.19基础数据类型详解

    2024-01-25 22:38:57
  • FrontPage2002简明教程五:css样式表的应用

    2008-09-17 11:31:00
  • css彩色虚线表格及JS鼠标指向单元格变色制作方法

    2007-08-10 13:08:00
  • SQL SERVER中的流程控制语句

    2024-01-12 18:25:26
  • 2021年最新版Python安装及使用教学

    2022-09-18 08:24:00
  • Python实现读取Linux系统的CPU以及内存占用

    2021-06-22 06:59:31
  • MySQL数据库的触发器和事务

    2024-01-15 21:35:08
  • Python3爬虫RedisDump的安装步骤

    2023-07-17 00:42:15
  • 详解Python中数据的多种存储形式

    2021-06-07 22:10:53
  • Python迭代器Iterable判断方法解析

    2023-06-11 15:37:19
  • Swift 3.0在集合类数据结构上的一些新变化总结

    2023-10-19 02:35:47
  • 实例详解Matlab 与 Python 的区别

    2021-07-20 22:14:15
  • PHP完全二叉树定义与实现方法示例

    2023-07-04 10:49:10
  • Python使用cx_Freeze库生成msi格式安装文件的方法

    2023-02-05 12:26:16
  • Python直接赋值、浅拷贝与深度拷贝实例分析

    2023-03-15 08:08:02
  • Httprunner简介、安装及基本使用教程

    2022-07-13 01:52:52
  • 如何在网页显示英语音标(附实例)

    2010-01-12 17:07:00
  • SQL2005 学习笔记 窗口函数(OVER)

    2024-01-27 09:50:49
  • asp之家 网络编程 m.aspxhome.com