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

yipeiwu_com6年前Python基础

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 通过可变参数计算n个数的乘积方法

python 通过可变参数计算n个数的乘积方法

通过可变参数计算n个数的乘积: 代码如下: list = [] def the_input(count=eval(input("输入乘数的总个数:"))): for i in...

Python实现分段线性插值

Python实现分段线性插值

本文实例为大家分享了Python实现分段线性插值的具体代码,供大家参考,具体内容如下 函数: 算法 这个算法不算难。甚至可以说是非常简陋。但是在代码实现上却比之前的稍微麻烦点。主要体现...

python random从集合中随机选择元素的方法

如下所示: list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice = random.sample(list, 5) #从list中随机获取5个元...

Python过滤txt文件内重复内容的方法

Python过滤txt文件内重复内容的方法

Python过滤txt文件内重复内容,并将过滤后的内容保存到新的txt中 示例如下 原文件 处理之后的文件 直接上代码 # -*-coding:utf-8 -*- f = o...

pygame实现俄罗斯方块游戏(基础篇2)

pygame实现俄罗斯方块游戏(基础篇2)

接上章《pygame实现俄罗斯方块游戏(基础篇1)》继续写俄罗斯方块游戏 五、计算方块之间的碰撞 在Panel类里增加函数 def check_overlap(self, diffx...