代码先锋网 代码片段及技术文章聚合

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

技术标签: 头像上传  cropper  exif  头像裁剪

做了一个头像上传的小功能,同时处理了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 onclick="rotateimgleft()">左</span>
						<span onclick="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);
}

版权声明:本文为qq_29866553原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29866553/article/details/79114698

智能推荐

cropper.js使用

       这两天一直在写上传头像那一部分,需要用到cropper裁剪,算起来这是我第二次用了,本来以为会比较顺手,结果一直报这个错。 本来以为是jq和cropper的引入顺序问题,结果调好了还在报这个错误,然后又考虑到会不会是jq和cropper的版本不对应,又知道cropper和cropper.js不一样,甚至还有一个jq...

解决某些机型图片旋转 (exif.js )

安装 NPM: Bower: 引用 封装 使用  ...

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

一、图片上传 (1)使用 (2)file文件属性  (3)OSS Javascript相关配置   其中有遇到跨域问题:参考以下链接,需后台进行跨域配置 https://www.cnblogs.com/weifeng1463/p/9120442.html 二、图片裁剪 (1)下载cropper.js插件 (2)引入CSS和JS (3)获取图片并展示 1、点击input,触发ch...

Exif.js 图片信息

使用Exif.js读取照片方向 转载:https://www.cnblogs.com/suyuanli/p/8168407.html 使用Exif.js读取照片的GPS信息和拍摄时间 参考:http://code.ciaoca.com/javascript/exif-js/...

调整上传图片的预览方向 (exif.js)

发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题;Android手机没这个问题。 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正。 下载依赖 在main全局引入 html5测试页面如下: 借鉴...

猜你喜欢

Cropper.js 文档翻译

Notes: 最大宽度是预览容器的初始宽度。 最大高度是预览容器的初始高度。 如果设置aspectRatio选项,请确保将预设容器的宽高比设置为相同。 如果预览未正确显示,请将溢出:隐藏样式设置为预览容器。 Options: option 类型 默认 值 说明 viewMode Number 0 0:无限制; 1:将裁剪框限制为不超过画布的大小; 2:限制最小画布尺寸以适应容器。如果画布和容器的比...

cropper.js实现图片裁剪预览并转换为base64发送至服务端。

一 、准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令:  2. cropper基于jquery,在此不要忘记引入jq,同时记得引入cropper.css  3. 此处后端使用的nodejs,不过不懂node的影响也不大。  二 、 图片裁剪并预览 1.首先利用cropper完成图片裁剪并预览: 裁剪并预览的完整代码如下: 三、图...

利用exif.js解决ios或Android手机上传竖拍照片旋转90度问题

html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题;Android手机没这个问题。 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正。 利用exif.js读取照片的拍摄信息,详见  http://code.ciaoca.com/javascript/exif-js/ 这里主要用到Orien...

移动端个别安装手机图片上传旋转90度 exif.js控制

做微信wap页项目的时候,遇到小米6拍照上传图片旋转的问题,后来查找资料得到 exif.js读取图像的元数据https://www.cnblogs.com/niuboren/archive/2016/09/19/5883796.html exif.js...