cropper.js oppoR9M 跑不起来相关问题==》已解决

先说下情况:

使用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');
            });


    });
}

博主比较着急,麻烦各位大佬指导!!!抱拳了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cropper.js 是一个用于图片裁剪的 JavaScript 库。它可以用于在前端实现用户自定义的图片裁剪功能。以下是使用 Cropper.js 的基本步骤: 1. 引入 Cropper.js 相关文件。在 HTML 页面中,通过 `<script>` 标签引入 Cropper.js 库文件和样式文件: ```html <link rel="stylesheet" href="path/to/cropper.css"> <script src="path/to/cropper.js"></script> ``` 2. 创建一个 `<img>` 元素,用于显示待裁剪的图片: ```html <img id="image" src="path/to/image.jpg"> ``` 3. 初始化 Cropper.js。在 JavaScript 中,找到该 `<img>` 元素,并使用 `new Cropper(element, options)` 初始化 Cropper.js 的实例。`element` 参数是需要进行裁剪的 `<img>` 元素,`options` 参数是一个对象,用于配置裁剪的各种行为和样式: ```javascript var image = document.getElementById('image'); var cropper = new Cropper(image, { // 配置参数 }); ``` 4. 可选:配置 Cropper.js 的参数。可以根据需要配置 Cropper.js 的各种参数,例如裁剪框的大小、裁剪比例、裁剪结果的输出等。具体的参数配置可以参考 Cropper.js 的官方文档。 5. 获取裁剪结果。使用 `cropper.getCroppedCanvas()` 方法获取裁剪后的图像内容,并进行进一步的处理,比如上传到服务器或显示在页面上: ```javascript var croppedCanvas = cropper.getCroppedCanvas(); // 对裁剪结果进行处理 ``` 6. 销毁 Cropper.js 实例。在不需要使用 Cropper.js 时,可以使用 `cropper.destroy()` 方法销毁实例,释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值