cropper.js+exif.js怎样实现头像上传的基本编辑操作
Admin 2022-11-15 群英技术资讯 996 次浏览
在日常操作或是项目的实际应用中,有不少朋友对于“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);
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录引言通用数据获取用户信息获取页面信息设置时间特定数据手动埋点上报全局自动上报组件上报总结引言上一篇我们详细介绍了前端如何采集异常数据。采集异常数据是为了随时监测线上项目的运行情况,发现问题及时修复。在很多场景下,除了异常监控有用,收集用户的行为数据同样有意义。怎么定义行为数据?顾名思义,就是用户在使用产品过程中产生
使用typescript类型来实现快排详情 目录 前言 元组快排 实现逻辑 实现数字的大小比较 实现 A 是否 小于或等于 B 实现 A 是否 大于或等于 B 实现Filter 优化Filter 重构数字的大小值比较 重构Filter 实现快排 测试快排 优化:负数 负数的判断 字符串转数字 获取负数的值 完善获取绝对值 重构数字的大小比较 重构快排 测试快排V2 前言 本文执行环境typescript,版本4.7.4 不使用typescript的计算能力,通过类型来实现快排 元组快排 能否将元组 [3, 1, 2, 4] 通过泛型转换成
这篇文章主要介绍了vue移动端自适应适配问题,本文通过实例代码详解给大家介绍的非常详细,需要的朋友可以参考下
对于弹幕相信经常看剧的朋友应该都比较了解,很多朋友喜欢开着弹幕看剧,那么我们想要自己实现弹幕效果,要怎样做呢?下面小编就给大家分享使用原生JS怎样实现弹幕效果的实例,感兴趣的朋友可以参考。
比如jQuery的插件扩展原理其实就是在类的原型上扩展方法。其实有一些方法可能很实用,但是它没有提供,这时候就是需要我们自己去做一下扩展了。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008