本文实例为大家分享了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.jpg" 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);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Devmax。

cropper.js和exif.js实现头像上传缩放裁剪旋转的更多相关文章

  1. OpenCV+Imutils实现图像的旋转操作

    imutils是在OPenCV基础上的一个封装,达到更为简结的调用OPenCV接口的目的,它可以轻松的实现图像的平移,旋转,缩放,骨架化等一系列的操作。本文将用其实现图像的旋转操作,感兴趣的可以学习一下

  2. 小程序实现图片裁剪上传

    这篇文章主要为大家详细介绍了小程序实现图片裁剪上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. iOS使用UIScorllView实现两指缩放功能

    两指缩放功能不仅可以用UIPinchGestureRecognizer手势来实现,还能用UIScorllView来实现,UIScrollView可以轻松的实现最大与最小缩放值,以及滚动的效果,效果非常棒,具体实例代码大家参考下本文吧

  4. Vue图片裁剪功能实现代码

    这篇文章主要介绍了Vue图片裁剪功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. Android如何监听屏幕旋转

    这篇文章主要介绍了如何监听Android屏幕旋转,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下

  6. php gd等比例缩放压缩图片函数

    这篇文章主要为大家详细介绍了php gd等比例缩放压缩图片函数,文章末尾为大家分享了php and gd 函数参考表,感兴趣的小伙伴们可以参考一下

  7. Python批量裁剪图形外围空白区域

    这篇文章主要介绍了Python批量裁剪图形外围空白区域,批量裁剪掉图片的背景区域,一般是白色背景,从而减少背景值的干扰和减少存储,下面文章的具体操作内容需要的小伙伴可以参考一下

  8. 使用JavaScript实现一个拖拽缩放效果

    这篇文章主要介绍了如何使用JS实现一个这样的拖拽缩放效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. JS实现旋转木马轮播案例

    这篇文章主要为大家详细介绍了JS实现旋转木马轮播案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. JavaScript数组操作之旋转二维数组

    这篇文章主要介绍了JavaScript数组操作之旋转二维数组,主要从两个方面展开文章介绍,一是通过对数组的操作熟练度;二是(镜像反转)比实现一更优,减少了空间复杂度,内容介绍具有一定的参考价值,需要的小伙伴可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部