在写新博客的时候,遇到需要用户上传自定义图片的处理,查了一番资料,决定用cropper和pillow来处理需要剪裁的图片上传,大致思路是:前端收集用户上传的图片和用户剪裁的尺寸数据,后台接收图片后按数据进行剪裁保存,但是剪裁的临时文件我还没有想出一个比较合理的办法,这里只记录前期的简单实现

一.cropper

github: https://github.com/fengyuanchen/cropper

这里我按教程引入了

cropper.min.css

cropper.min.js

但是会报错,TypeError: image.cropper is not a function直到我引入了这个解决了报错问题,此外他们都是依赖jquery的

jquery-cropper.min.js

{#cropper编辑区域#}
<div class="avatar-wrapper" id='avatar-wrapper'><img src="">
</div>
{#头像预览区域#}
<div class="avatar-preview" style=" border-radius: 15%">  <img style="width: 96px; height: 96px;" src=""></div>
{#上传按钮#}
<a id="upload" class="btn btn-primary">上传头像</a>
<label class="btn btn-primary" for="avatar-input">选择图片</label>
{#form#}

<form action="" method="post" id="avatar_form" enctype="multipart/form-data">
    {%csrf_token%}   <input style="display:none" type="file" class="avatar-input" id="avatar-input" name="avatar_file" accept=".jpg,.jpeg,.png">   <input type="hidden" id="avatar_x" name="avatar_x">   <input type="hidden" id="avatar_y" name="avatar_y">   <input type="hidden" id="avatar_width" name="avatar_width">   <input type="hidden" id="avatar_height" name="avatar_height"></form>

模板的主要内容就是这些,主要是编辑区域、预览区域、上传按钮和隐藏的form组成,其中预览区域可以根据自己的需求先展示原头像或者默认头像,通过js将图片和尺寸数据保存在隐藏的form中上传到后台

cropper的初始化:

var image = $('#avatar-wrapper img');
image.cropper({checkImageOrigin: true, //检查图片来源dragMode: 'move',   //图片可移动restore:false,      //窗体调整大小之后不自动恢复裁剪区域zoomOnWheel: false, //不允许通过鼠标滚轮缩放zoomOnTouch: false, //不允许通过触摸缩放aspectRatio: 1 / 1, //裁剪比例autoCropArea: 0.5,  //裁剪背景透明度autoCropArea: 1,    //自动裁剪的比例preview: ".avatar-preview",//预览区域crop: function (e) {//返回图片编辑相关数据$('#avatar_x').val(e.detail.x);$('#avatar_y').val(e.detail.y);$('#avatar_width').val(e.detail.width);$('#avatar_height').val(e.detail.height);},
});        

图片上传到cropper进行剪裁:

        $("#avatar-input").change(function(){var URL = window.URL || window.webkitURL;if(URL){var files = this.files;if (files && files.length){var file = files[0];if (/^image\/\w+$/.test(file.type)) {var blobURL = URL.createObjectURL(file);image.cropper('reset').cropper('replace', blobURL);$('.avatar_crop .disabled').removeClass('disabled');} else {alert('请选择一张图片');}}}});

上传到后台:(我使用的jquery-form.js插件,普通的ajax方法也可以)

        $('#upload').click(function () {if($('#avatar-wrapper img').attr('src')==''){$('#infoModal h4').html('请先选择一个图片')$('#infoModal').modal('show')return false;}var $form=$("#avatar_form")$form.ajaxSubmit(function (headpicaddress) {})

二.pillow

def user_my_info_headpic(request):# 剪裁数据获取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']))# 图片临时保存with open(os.path.join(settings.BASE_DIR, "test1.jpg"), "wb") as f:for line in request.FILES['avatar_file']:f.write(line)# 打开图片im = Image.open(os.path.join(settings.BASE_DIR, "test1.jpg"))# 剪裁图片crop_im = im.crop((left, top, right, buttom))# 保存图片crop_im.save(os.path.join(settings.BASE_DIR, "test2.jpg"))return HttpResponse("ok")

这是我的view方法,路由部分省略了,只是简单的保存在一个临时位置,后面我会整理出一个更合理的方法和完整的流程

转载于:https://www.cnblogs.com/superpigeons/p/8976306.html

cropper+pillow处理上传图片剪裁(一)相关推荐

  1. html中剪切图片所用插件,简单功能强大的jQuery图片剪裁插件Image Cropper

    插件描述:相信很多朋友都在大型的网站,如新浪微博.QQ微博上看到过头像裁图工具,感觉很高大尚吧,今天朋友们有福了,今天就来说一说一款这么高大尚的插件cropper,cropper是一款使用简单且功能强 ...

  2. php裁剪插件,简单功能强大的jQuery图片剪裁插件Image Cropper 中文api

    图片剪裁插件Image Cropper使用方法 引入必要的js和css核心文件 构建html,可以将图片或canvas直接包裹到一个块级元素中 初始化插件,可以使用$.fn.cropper方法来初始化 ...

  3. input file图片上传(使用OSS Javscrtipt 上传到服务器)以及图片裁剪(cropper.js)

    一.图片上传 (1)使用 <input type="file" accept="image/*" name="file" @chang ...

  4. java -- cropper裁剪图片并base64上传 移动端简单示例

    前言 cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. cropper有两种方式 ...

  5. 移动端/手机端 完成图片旋转 压缩 剪裁 上传

    本篇文章主要介绍移动端/手机端图片的旋转.压缩.剪裁.上传 这个功能的实现已经好了几次方案流程了,对最终的方案流程进行简述 实现功能的主要方法/思想 1.图片的选取主要是通过input实现 2.图片的 ...

  6. cropper初始化_jQuery.cropper中文API详解

    cropper提供了大量的参数.方法和事件供图片的剪裁操作. 安装 可以通过Bower或NPM来安装该插件. bower install cropper npm install cropper 使用方 ...

  7. react+antd实现图片上传并且剪裁(请参照最新文章,此案例有bug)

    代码详情 (存在的bug:只有第一次上传剪裁是正确的,在不刷新页面的情况下再次进行剪裁会出现错误,目前没有找到解决办法.) 解决办法:点击上传按钮完成上传之后,按钮变为不能点击的状态,阻止bug的发生 ...

  8. 图片上传裁剪插件cropper.js的API详解

    jQuery.cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用.    cropp ...

  9. html图片自动剪裁,jQuery简单且功能强大的图片剪裁插件

    cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. croppe ...

最新文章

  1. P1449 后缀表达式
  2. oracle 11g 大量废连接占满数据库连接问题处理
  3. Android Studio的gradle项目构建
  4. python document_python 处理document文档 保留原样式
  5. c++冒泡排序代码_数据结构和算法必知必会的50个代码实现
  6. php 选择 出现列表,php – 如何从加权列表中选择4个唯一项?
  7. html h1 背影设为图片,CSS Backgrounds(背景)
  8. SQL服务器引擎---协议
  9. linux命令行的操作符,Linux shell 比较运算符使用方法教程
  10. 迁移学习比赛:OpenAI喊你重温「音速小子索尼克」
  11. c web mysql数据库_C语言操作MySQL数据库
  12. Spark SQL External DataSource外部数据源
  13. ❤️和广告说再见,将“沉浸式阅读”进行到底❤️
  14. Pr 音频效果参考:特殊效果
  15. cad批量打印快捷键_基础教程——CAD的批量打印功能
  16. int x = 0x13 c语言,计算机二级C语言选择题练习
  17. 只需10行代码就能对Excel文件进行批量去重~
  18. 加拿大留学有何魅力,可以吸引众留学生蜂拥而至
  19. 苏宁易购获得suning商品详情 API 返回值说明
  20. 2.4G无线技术参数及行业分享

热门文章

  1. php 调用openoffice,PHP调用OpenOffice实现word转PDF的方法
  2. 荣耀9“致敬”小米6?这是今年手机界最大的笑话!
  3. 编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件...
  4. 【ASP.NET随笔】DataRow和DataRowView
  5. Week2 Teamework from Z.XML 软件分析与用户需求调查(三)必应助手体验评测
  6. ShartPoin无法创建门户网站的问题
  7. Web 阶段梳理(2019.1.9)
  8. 物联网入门学什么开发板_物联网入门:如何构建DIY Blynk板
  9. 物联网思维导图_物联网将如何改变我们的思维方式
  10. 开源软件在中小企业的应用_开源如何启动我的小企业