您的位置:首页 > 其它

截取图片生成头像插件

2017-09-30 16:13 120 查看

上传头像插件

目的: 帮助开发者快速开发上传头像功能点

背景: 现在b,g能搜到的头像上传插件并不太好用,所以想提供一个比较自由度的上传并且可以剪切的插件。

资源: 具体资源请查看这里

实现大致思路如下:

先有一个上传的(本地上传的功能),然后获取图片的地址。

获取图片地址之后,进行截取图片(这里推荐一个插件)点这里,具体怎么用就不再赘述。

等截取图片之后,需要将截取的文件转换为二进制大文件。$(‘#image’).cropper(‘getCroppedCanvas’).toBlob();

调取接口,将二进制大文件上传即可。

直接上代码:

先引入如下文件

cropper.js [点这里](https://github.com/fengyuanchen/cropperjs)


具体业务代码

$(function () {
var URL = window.URL || window.webkitURL;
var $image = $('#image');
var $rotate = $('#userImg_rotate');
var $reUpload = $('#userImg_reUpload');
var $zoomOut = $('#userImg_zoomOut');
var $zoomIn = $('#userImg_zoomIn');
var $save = $('#userImg_save');
var croppable = false;
var $previews = $('.userImg_preview');
var options = {
aspectRatio: 1,
viewMode: 1,
built: function () {
croppable = true;
},
build: function (e) {
var $clone = $(this).clone();

$clone.css({
display: 'block',
width: '100%',
minWidth: 0,
minHeight: 0,
maxWidth: 'none',
maxHeight: 'none'
});

$previews.css({
width: '100%',
overflow: 'hidden'
}).html($clone);
},
crop: function (e) {
var imageData = $(this).cropper('getImageData');
var previewAspectRatio = e.width / e.height;

$previews.each(function () {
var $preview = $(this);
var previewWidth = $preview.width();
var previewHeight = previewWidth / previewAspectRatio;
var imageScaledRatio = e.width / previewWidth;

$preview.height(previewHeight).find('img').css({
width: imageData.naturalWidth / imageScaledRatio,
height: imageData.naturalHeight / imageScaledRatio,
marginLeft: -e.x / imageScaledRatio,
marginTop: -e.y / imageScaledRatio
});
});
}
};
var originalImageURL = $scope.userInfo_imgUrl;
var uploadedImageURL;

$scope.initCropper = function(){
// init
$image.attr('src',$scope.userInfo_imgUrl).cropper(options);
};

// rotate
$rotate.on('click', function(){
$image.cropper('rotate', 90);
});

// zoomOut
$zoomOut.on('click',function(){
$image.cropper('zoom', -0.1);
});

// zoomIn
$zoomIn.on('click',function(){
$image.cropper('zoom', 0.1);
});

// Move
/*$move.on('click',function(){
$image.cropper('setDragMode');
});*/

// reUpload
$reUpload.on('click',function(){
$image.cropper('destroy').attr('src', $scope.userInfo_imgUrl).cropper(options);
if (uploadedImageURL) {
URL.revokeObjectURL(uploadedImageURL);
uploadedImageURL = '';
}
});

// Keyboard
$(document.b
4000
ody).on('keydown', function (e) {

if (!$image.data('cropper') || this.scrollTop > 300) {
return;
}

switch (e.which) {
case 37:
e.preventDefault();
$image.cropper('move', -1, 0);
break;

case 38:
e.preventDefault();
$image.cropper('move', 0, -1);
break;

case 39:
e.preventDefault();
$image.cropper('move', 1, 0);
break;

case 40:
e.preventDefault();
$image.cropper('move', 0, 1);
break;
}

});

// 剪切和确定上传图片
$save.on('click',function(){
common.Loading.show();
$('#image').cropper('getCroppedCanvas').toBlob(function (blob) {
var formData = new FormData();

formData.append('photoFile', blob);

// 这里写入后端给你的上传接口
$.ajax(API_URL+'', {
method: "POST",
data: formData,
headers: {
'auth-token' : common.Cookie.get('token')
},
processData: false,
contentType: false,
success: function (res) {
common.Loading.hide();
common.Toast.show('头像上传成功!');
try{
$scope.$apply(function(){
$scope.isShowUnCompleteInfoBox = false;
$scope.isShowCompleteInfoBox = false;
$scope.userInfo_imgUrl = res.data;
})
}catch(err){
console.log(err)
}
},
error: function () {
common.Toast.show('头像上传失败!');
}
});
});
})

// 上传图片,这里传本地的图片并且获取一个本地图片的路径
var $inputImage = $('#inputImage');
if (URL) {
$inputImage.change(function () {
var files = this.files;
var file;

if (!$image.data('cropper')) {
return;
}

if (files && files.length) {
file = files[0];

if (/^image\/\w+$/.test(file.type)) {
if (uploadedImageURL) {
URL.revokeObjectURL(uploadedImageURL);
}

uploadedImageURL = URL.createObjectURL(file);
$image.cropper('destroy').attr('src', uploadedImageURL).cropper(options);
$inputImage.val('');
} else {
common.Toast.show('请选择图片再上传!')
}
}
});
} else {
$inputImage.prop('disabled', true).parent().addClass('disabled');
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插件 头像插件
相关文章推荐