先说下情况:
使用cropper.js 写的app图片上传剪裁功能,思路:使用 input=“file” 进行监听用户选择的图片 然后进行canvas裁剪 最后转换成base64压缩过的图片上传服务器。
遇到问题:
项目在浏览器正常跑起来,在移动端 oppoR9Sk 也可以跑起来,但是在 oppoR9M 选择完图片之后没办法发进行剪裁操作。
下面是代码:
html部分:
<!-- ipt框1 -->
<div class="picture_div">
<!-- 替换成需要的id -->
<input type="file" id="fileTest" accept="image/*">
</div>
<!-- 2018-wu+ -->
<!-- 弹出层 -->
<div class="img_pop_up" style="display:none;">
<div class="cut_img">
<img id="imgTest" src="" alt="">
</div>
<div class="confirm_button">
<button class="cancel_choose">取消</button>
<div class="rotate_div">
<button class="rotate_left">向左旋转</button>
<button class="rotate_right">向右旋转</button>
</div>
<button class="confirm_choose">确定</button>
</div>
</div>
<script>
$(function(){
var $fileTest = $("#fileTest"), //ipt输入框
$fileTest2 = $("#fileTest2"),
$imgTest = $("#imgTest"), //img
$img_pop_up = $(".img_pop_up"), //弹出层
$picture_div = $(".picture_div"), //ipt输入框
$confirm_choose = $(".confirm_choose"), //确定
$cancel_choose = $(".cancel_choose"), //取消
$rotate_left = $(".rotate_left"), //向左旋转
$rotate_right = $(".rotate_right"), //向右旋转
ratio = '1/1', //上传比例
store = '0.9', //剪裁面积大小(百分比)和图片进行对比
task = false; // 是否拖动剪裁框
$fileTest.click(function(){
ToString($fileTest, $imgTest, $img_pop_up, $confirm_choose, $cancel_choose, $rotate_left,
$rotate_right, '1/1', store, task,
function (data) {
if (data.message.code == 0) {
layer.msg('保存成功', {
time: 1000
});
let li = '<li><i class="icon iconfont icon-huaban"></i><img src="'+data.message.msg+'" class="thumb-image" name="images"></li>'
$(".lunbo-list").append(li)
} else {
layer.msg('保存失败,请重新上传', {
time: 1000
});
}
})
})
$fileTest2.click(function(){
ToString($fileTest2, $imgTest, $img_pop_up, $confirm_choose, $cancel_choose, $rotate_left, $rotate_right, '', '1', true, function (data) {
if (data.message.code == 0) {
layer.msg('保存成功', {
time: 1000
});
if ($(".img-container_lis > li").length > 2) {
layer.msg('最多上传 3 张图片', {
time: 1000
});
return
} else {
let li = '<li><i class="icon iconfont icon-huaban"></i><img src="'+ data.message.msg +'" class="thumb-image" name="productHtml"></li>'
$(".xiangqing-list").append(li)
}
} else {
layer.msg('保存失败,请重新上传', {
time: 1000
});
}
})
})
// 点击删除
$(".img-container ").on('click', '.xxx', function () {
$(this).parent('li').remove();
})
})
</script>
裁剪核心参数:
/**
*
*
* @param {*} fileTest
* @param {*} imgTest
* @param {*} img_pop_up
* @param {*} confirm_choose
* @param {*} cancel_choose
* @param {*} rotate_left
* @param {*} rotate_right
* @param ratio
* @param store
* @param task
* @param {*} callback
*
* //使用方法
* (这句话写在html)
* var result;
var $fileTest = $("#fileTest"), //ipt输入框
$imgTest = $("#imgTest"), //img
$img_pop_up = $(".img_pop_up"), //弹出层
$picture_div = $(".picture_div"), //ipt输入框
$confirm_choose = $(".confirm_choose"), //确定
$cancel_choose = $(".cancel_choose"), //取消
$rotate_left = $(".rotate_left"), //向左旋转
$rotate_right = $(".rotate_right") //向右旋转
ratio //原始默认16 / 9,
store ///(0.9)剪裁面积大小(百分比)和图片进行对比
stsk // 是否拖动
ToString($fileTest, $imgTest, $img_pop_up, $confirm_choose, $cancel_choose, $rotate_left,ratio,store,
$rotate_right,
function (data) {
// result = data;
console.log(data);
//渲染
})
*/
function ToString(fileTest, imgTest, img_pop_up, confirm_choose, cancel_choose, rotate_left, rotate_right, ratio, store, task, callback) {
// 监听上传变化
var base64 = '';
fileTest.change('change', function (ev) {
let $file = $(this);
let fileObj = $file[0];
let windowURL = window.URL || window.webkitURL;
let dataURL = null;
// if (!fileObj || !fileObj.files || !fileObj.files[0]) return;
dataURL = windowURL.createObjectURL(fileObj.files[0]);
imgTest.attr('src', dataURL);
imgTest.cropper({
aspectRatio: ratio, // 原始默认16 / 9,
viewMode: 3,
guides: true, //裁剪框虚线 默认true有
dragCrop: false, //是否新建裁剪框
dragMode: "none",
responsive: true, //调整窗口后重新渲染croper
restore: true, //调整窗口后是否委会剪裁的区域
checkCrossOrign: true, //检查当前图像是否为跨域
checkImageOrigin: false,
modal: true, //黑色遮罩层
center: false, //剪裁框在图片的中心
background: false, // 容器是否显示网格背景(马赛克)
autoCrop: true, //初始化,自动生成图像(自定显示剪裁框)
autoCropArea: store, //剪裁面积大小(百分比)和图片进行对比
movable: task, //是否能移动剪裁框
rotatable: true, //是够允许旋转图片
scalable: false, //是否允许缩放图片
zoomable: true, //是否允许放大图片
zoomOnTouch: true, //手指拖动放大图片
zoomOnWheel: true, //鼠标放大图片
wheelZoomRatio: false, //手表拖动图片
cropBoxMovable: task, //是否允许拖动裁剪框
// cropBoxResizable: task, //是否允许拖动 改变裁剪框大小(不能用)
resizable: task, //是否允许改变裁剪框大小
// minContainerWidth: 320,
// minContainerHeight: 180,
// minCanvasWidth: 320,
// minCanvasHeight: 180,
// minCropBoxWidth: 100,
// minCropBoxHeight: 100,
});
imgTest.cropper('replace', dataURL),
img_pop_up.css({
'display': 'block'
}),
// 向左旋转
rotate_left.off().on('click', function () {
imgTest.cropper('rotate', 45);
}),
// 向右旋转
rotate_right.off().on('click', function () {
imgTest.cropper('rotate', -45);
}),
// 取消上传图片事件
cancel_choose.off().on('click', function () {
//TODO-清空val值
fileTest.val('');
img_pop_up.css('display', 'none');
imgTest.cropper('clear'); //clear():清空剪裁区域。
imgTest.cropper('destroy');
// fileTest.css({
// 'display': 'block'
// });
}),
// 点击确定
confirm_choose.off().on('click', function () {
img_pop_up.css({
'display': 'none'
});
if (imgTest.cropper('getCroppedCanvas') == null) return;
base64 = imgTest.cropper('getCroppedCanvas').toDataURL('image/jpeg',0.3);
$('.self_bg').remove();
const logoImg = `<div class="self_bg" style="dixplay:block;">[图片上传失败...(image-1fecd5-1512026520854)]</div>`
$('.self_logo_up').append(logoImg);
// console.log(imgTest.cropper('getCroppedCanvas'));
$("#li").append(imgTest.cropper('getCroppedCanvas'))
// console.log(base64);
$.ajax({
// url: "http://localhost:8081/rest/itemcat/list?callback=getMessage",
headers: {
'Access-Control-Allow-Origin': '*'
},
url: "http://www.yizhangjin.cc/upload/base64Upload.do",
type: "post",
cache: false,
data: {
uploadify: base64
},
ContentType: 'application/x-www-form-urlencoded',
dataType: "json",
// jsonp: "callback", //这里定义了callback的参数名称,以便服务获取callback的函数名即getMessage
// jsonpCallback: "callback", //这里定义了jsonp的回调函数
success: function (data) {
if (callback != null) {
callback(data)
}
},
error: function (err) {
// console.log(err)
}
});
//TODO-清空val值
fileTest.val('');
imgTest.cropper('clear'); //clear():清空剪裁区域。
imgTest.cropper('destroy');
});
});
}
博主比较着急,麻烦各位大佬指导!!!抱拳了