cropper.js和exif.js实现头像上传缩放裁剪旋转

cropper.js和exif.js实现头像上传缩放裁剪旋转

本文实例为大家分享了cropper.js和exif.js实现头像上传缩放裁剪旋转的具体代码,供大家参考,具体内容如下

做了一个头像上传的小功能,同时处理了ios竖着拍照图片旋转的问题。cropper.js(注意:cropper压缩版的js在手机版版缩放图片会有黑屏和图片飞了的bug,所以建议引入开发版本的cropper)依赖jquery,exif是用来获取拍照信息的,用于修复ios竖着拍照旋转的问题,我用的是amazeui框架,我在文件中也引入。

这是html文件

<!doctype html> <html lang="zh"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>cropper图片裁剪缩放</title>     <link rel="stylesheet" href="css/amazeui.min.css">     <link rel="stylesheet" href="css/cropper.css">     <link rel="stylesheet" href="css/amazeui.cropper.css"> </head> <body>     <div class="am-form-group">         <label>logo</label>         <div class="am-cf">             <a href="javascript:;" id="up-img-touch" data-am-modal="{target: '#doc-modal-1'}">                 <img src="picture-2.webp" id="pic_img" style="width: 100px;">                 <input type="hidden" name="new_pic" id="new_pic" value="">             </a>         </div>     </div>     <!--图片上传框-->     <div class="am-popup up-frame-bj " id="doc-modal-1">         <div class="am-modal-dialog up-frame-parent up-frame-radius">             <div class="header_check header_setting">                 <a href="javascript:;" class="iconfont" data-am-modal-close>关闭</a>                 <h1>上传</h1>             </div>             <div class="up-frame-body">                 <div class="up-pre-main am-cf" >                     <div class="up-pre-before up-frame-radius">                         <img alt="" src="" id="image">                     </div>                 </div>                 <div class="upload_btn am-cf">                     <div class="am-fl am-form-file">                         <button type="button" class="am-btn">上传图片</button>                         <input type="file" id="inputImage">                     </div>                     <div class="rotateimg">                         <span οnclick="rotateimgleft()">左</span>                         <span οnclick="rotateimgright()">右</span>                     </div>                     <div class="am-fr">                         <button type="button" class="am-btn"  id="up-btn-ok" url="admin/user/upload.action">确定</button>                     </div>                 </div>             </div>         </div>     </div> </body> <script src="js/jquery.min.js" charset="utf-8"></script> <script src="js/amazeui.min.js" charset="utf-8"></script> <script src="js/cropper.js" charset="utf-8"></script> <script src="js/exif.js" charset="utf-8"></script> <script src="js/custom_up_img.js" charset="utf-8"></script> </html>

这是js文件

$(function() {     'use strict';     // 初始化     var $image = $('#image');     $image.cropper({         aspectRatio:1/1,         viewMode : 1,         autoCropArea:0.8,         dragMode:'move',         cropBoxMovable:false,         cropBoxResizable:false,         zoomOnTouch:true,         zoomable:true,         movable:true,     });     var $inputImage = $('#inputImage');     var URL = window.URL || window.webkitURL;     var Orientation     var rotate_num     var blobURL;     if (URL) {         $inputImage.change(function () {             var files = this.files;             var file;             if (files && files.length) {                 file = files[0];                 if (/^image\/\w+$/.test(file.type)) {                     blobURL = URL.createObjectURL(file);                     $image.attr("src",blobURL)                     EXIF.getData(file, function() {                         EXIF.getAllTags(this);                         Orientation = EXIF.getTag(this, 'Orientation');                     });                     $image.one('built.cropper', function () {                         // Revoke when load complete                         URL.revokeObjectURL(blobURL);                     }).cropper('reset', true).cropper('replace', blobURL);                     $inputImage.val('');                 } else {                     window.alert('Please choose an image file.');                 }             }         });     } else {         $inputImage.prop('disabled', true).parent().addClass('disabled');     }     $('#up-btn-ok').on('click',function(){         var img_src=$image.attr("src");         if(img_src==""){             $('#my-alert').modal('open');             return false;         }         var url=$(this).attr("url");         var canvas=$("#image").cropper('getCroppedCanvas');         var cv_img = document.createElement("canvas");         var ctx = cv_img.getContext("2d");         var x = canvas.width/2;         var y = canvas.height/2;         cv_img.width =canvas.width;         cv_img.height =canvas.width;         ctx.clearRect(0,0, canvas.width, canvas.height);//先清掉画布上的内容         ctx.translate(x,y);//将绘图原点移到画布中点         if(Orientation == 6) {             ctx.rotate(Math.PI/2);         } else if(Orientation == 3) {             ctx.rotate(-Math.PI/2);         } else if(Orientation == 8) {             ctx.rotate(Math.PI/1);         }         ctx.translate(-x,-y);//将画布原点移动         ctx.drawImage(canvas,0,0);         var data=cv_img.toDataURL("image/jpeg");         $("#pic_img").attr("src",data)         $('#new_pic').val($("#pic_img").attr("src"));         $('#doc-modal-1').modal('close');     }); }); function rotateimgright() {     $("#image").cropper('rotate', 90); } function rotateimgleft() {     $("#image").cropper('rotate', -90); } function set_alert_info(content){     $("#alert_content").html(content); }

推荐阅读

    js设置div的边框|怎样给div设置边框

    js设置div的边框|怎样给div设置边框,,1. 怎样给div设置边框1、首先新建一个html文件,输入基本的内容,这里设置一个div,并把它的class设置为de

    js设置样式|js设置样式类

    js设置样式|js设置样式类,,js设置样式    javascript改变CSS样式分为局部和全局,分别如下:  一、局部改变样式    有三种方法:直接

    js用代码实现简单购物车

    js用代码实现简单购物车,,图: 选择所有按钮: 复制代码代码如下所示: 选择 笔记本电脑:3000元 笔记本电脑:3000元 笔记本电脑:3000元 笔记本电脑:3

    js设置背景色|js设置颜色

    js设置背景色|js设置颜色,,js设置背景色首先通过js定位到div的子元素,再通过setatteibute方法给属性添加背景色。js设置颜色js改变字体的颜

    Safari调试iOS中的js

    Safari调试iOS中的js,页面,设备,概述对于HTML5的开发,大家都知道Chrome的DevTools工具有强大的功能和友好的用户体验,不仅能快速方便调试Jav

    Bootstrap的js插件之模态框|modal

    Bootstrap的js插件之模态框|modal,模态,饭盒,.modal——指明div元素包裹模态框;.fade——给模态框添加淡入淡出效果;.modal-dialog——包裹

    js默认事件汇总

    js默认事件汇总,事件,表单,默认事件   就是浏览器通过HTML标签或DOM元素提供的一些功能性的默认行为。比如在a标签href属性上的跳转,右键

    js获取元素宽度

    js获取元素宽度,内联,样式,js获取元素宽度1、使用内联样式,即直接把CSS写在HTML元素的style属性中<div > </div>复制代码通过以下js代码

    SQLite使用JSON扩展

    SQLite使用JSON扩展,插件,加载,一、介绍 SQLite3.9.0之后的版本,添加了JSON扩展。在表中可以保存JSON类型。实际上SQLite将JSON类型的

    jscript.dll是什么

    jscript.dll是什么,系统,文件,论坛,显示,扫描,修复,  jscript.dll是Microsoft JavaScript脚本支持相关文件。属于: Microsoft JScript系统 DLL

    postgresql中对jsonb的查询及转换

    postgresql中对jsonb的查询及转换,数据,字段,表数据:需要将strata排除,并且过滤info字段中为{}的数据,将jsonb转换成text,替换“,{,}见SQL:sele