cropper+pillow处理上传图片剪裁(二)
上次说到处理上传头像的方法是临时保存在本地,其实这样做并不妥,而且修改后的头像重新上传到model中也很麻烦,差了很多资料,解决了这个问题
大致思路:用户上传原图和修改数据—PIL修改后将图片保存为内存中的bytes—使用FTPstorage按规则上传到FTP—修改model中的头像路径数据
一.ContentFile\BytesIO
from PIL import Image
from io import BytesIO
from django.core.files.base import ContentFile def crop_image(file, left, top, right, buttom):
# 打开图片
im = Image.open(file)
# 剪裁图片
crop_im = im.crop((left, top, right, buttom))
# 保存图片
image_io = BytesIO()
crop_im.save(fp=image_io, format='JPEG')
return ContentFile(image_io.getvalue())
这里简单的写了一个修改图片的方法,因为后面要将图片上传到FTP,所以需要用之前实现的FTPstorage,经过查阅官方文档,发现storage的save操作的对象content只能是django.core.files.base里的File类以及它的子类,所以这里需要自己生成一个新的File:ContentFile,参数就是BytesIO类的的getvalue()方法,可以得到一个bytes
二.FTPstorage
def headpic_to_ftp(path, content):
storage = FTPStorage()
if storage.exists(path):
storage.delete(path)
storage.save(path, content)
else:
storage.save(path, content)
这里简单的写了一个上传的方法,path是路径和文件名,可以根据自己的需求在view中写逻辑
三.view
def user_my_info_headpic(request):
# 剪裁数据获取
username = request.user
headpic_name = headpic_path+'/'+str(username)+'.jpg'
file = request.FILES['avatar_file']
top = int(float(request.POST['avatar_y']))
buttom = top + int(float(request.POST['avatar_height']))
left = int(float(request.POST['avatar_x']))
right = left + int(float(request.POST['avatar_width']))
# 剪裁头像
crop_file = crop_image(file, left, top, right, buttom)
# 上传头像
headpic_to_ftp(headpic_name, crop_file)
# 修改头像信息
userinfo = UserInfo.objects.get(username=username)
userinfo.headpic=headpic_name
userinfo.save()
return HttpResponse("success")
cropper+pillow处理上传图片剪裁(二)的更多相关文章
- cropper+pillow处理上传图片剪裁(一)
		在写新博客的时候,遇到需要用户上传自定义图片的处理,查了一番资料,决定用cropper和pillow来处理需要剪裁的图片上传,大致思路是:前端收集用户上传的图片和用户剪裁的尺寸数据,后台接收图片后按数 ... 
- 基于layui+cropper.js实现上传图片的裁剪功能
		最近因项目需求,需要在上传图片的时候先对图片裁剪,然后在上传,所以就有了本文的出现. 开始正文之前,要提一下这个图片的裁剪:图片的裁剪,有前端裁剪,也可以后端裁剪 前端的裁剪我知道的可以分为这么两种: ... 
- 图片剪裁上传插件 - cropper
		图片剪裁上传插件 - cropper <style> .photo-container{float: left;width: 300px;height: 300px;} .photo-co ... 
- 插件介绍 :cropper是一款使用简单且功能强大的图片剪裁jQuery插件。
		简要教程 cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. c ... 
- CSS3之背景剪裁Background-clip
		CSS3之背景剪裁Background-clip是CSS3中新添加的内容.这个属性还是比较简单的,主要分五个属性值:border.padding.content.no-clip和text.下面将针对这 ... 
- h5端呼起摄像头扫描二维码并解析
		2016年6月29日补充: 最近做了一些与表单相关的项目,使用了h5的input控件,在使用过程中遇到了很多的坑.也包括与这篇文章相关的. 首先我们应该知道使用h5新提供的属性getUserMedia ... 
- MongoDB GridFS 对图片进行增删改
		using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using MongoDB.Driver.GridFS ... 
- iOS开发——高级篇——Parse 教程:网络后台基础
		本教程已针对Swift, iOS 8.3, Xcode 6.3及最新的Parse SDK(1.7.1版本)更新. 网络后台支持可以为你的App添加许多崭新的功能:不论是数据同步,社交分享,还是云端存储 ... 
- XMPP框架下微信项目总结(8)图片发送
		前言:“图片”发送和“聊天文本”都是通过模块发起的成为:“消息模块”(反正传递的都是字符串) 发送原理: 1 current客户端获取本地图片 2 xmpp发送“字符串”(为什么是字符串?1: ... 
随机推荐
- spring3+quartz2
			听说来自这里www.ydyrx.com 转载的: 最近公司要用定时任务,自己想着学习并完成任务,百度,google,360,必应,能用的搜索都用了,参差不齐,搞了一整天,也没找到一个好的例子.没办法, ... 
- python 生成测试报告并发送邮件
			前言: 使用unittest编写自动化测试脚本,执行脚本后可以很方便看到测试用例的执行情况. 但如果想向领导汇报工作,就需要提供更直观的测试报告. 思路: 使用unittest编写测试用例,HTMLT ... 
- js与Jquery的对比
			// document.getElementById("divCommit").style.display="none";// document.g ... 
- 文献阅读 | Benefits and limitations of genome-wide association studies
			参考:今日阅读:GWAS的优劣势 - Omics Liu Omics 待续~ 
- Skyline Web 端数据浏览性能优化
			三维数据的效率一直是个瓶颈,特别是在Web端浏览一直是个问题,在IE内存限制1G的条件下,对于三维数据动不动几十G的数据量,这1G显得多么微不足道.虽然现在三维平台都是分级加载,或者在程序中采用数据分 ... 
- Linux—Ubuntu14.0.5安装mongo
			1.安装mongo sudo apt-get install mongo 2.如果遇到找不到安装包运行,那就更新资源列表 sudo apt-get update 3.安装成功会自动运行mongo pg ... 
- Ubuntu Server下docker实战 02: docker进阶配置
			在上一篇文章里<Ubuntu Server下docker实战 01: 安装docker>,我们已经把docker安装起来了,并运行了一个hello-world 这一篇,我们继续讲进阶配置. ... 
- delphi窗口的create和free,一个古老的话题
			窗体分为模式窗体和无模式窗体. 模式窗体在创建窗口创建和释放: begin if not Assigned(FB_Input_JianYanDan) then FB_Input_JianYanDan ... 
- 【[Offer收割]编程练习赛15 B】分数调查
			[题目链接]:http://hihocoder.com/problemset/problem/1515 [题意] [题解] 带权并查集 relation[x]表示父亲节点比当前节点大多少; 对于输入的 ... 
- Java上使用Lombok插件简化Getter、Setter方法
			Maven引入依赖: <dependencies> <dependency> <groupId>org.projectlombok</groupId> ... 
