1***@qq.com
1***@qq.com
  • 发布:2019-10-21 18:39
  • 更新:2021-03-05 09:09
  • 阅读:2332

muiAPP使用h5+的camera和gallery返回的图片链接进行canvas的toDataURL就会报: Script error.filename:lineno:0

分类:MUI
mui

这部分代码一直没有改动的,近期发现就莫名其妙报错了。

MUI APP 采用h5+的拍照和相册的API
返回的链接进行canvas的toDataURL就会报错:Script error.filename:lineno:0

调用拍照和相册的代码如下

                    //拍照 ===========================  
		function getCameraImg() {  
			var c = plus.camera.getCamera(); //获取摄像头对象  
			c.captureImage(function(e) {  
				plus.io.resolveLocalFileSystemURL(e, function(entry) {  
					var url = entry.toLocalURL();  
					var imgName = entry.name;  
					console.log("拍照图片地址:" + url + "拍照图片名称:" + removeFileSuffix(imgName) + " //" + imgName);  
					bg_img_set(url, removeFileSuffix(imgName));  
					uploadMatchPicture(url, imgName);  
				}, function(e) {  
					plus.nativeUI.alert(e.message);  
				});  
			}, function(s) {  
				mui.toast("取消拍照");  
				console.log("error" + s);  
			}, {  
				filename: "_doc/camera/"  
			});  


	 //本地相册选择 ============================================  
		function getGalleryImg() {  
			if(mui.os.plus) {  
				//手机相册  
				plus.gallery.pick(function(e) {  
					if(e.files.length > 4) {  
						mui.toast('一次性最多上传4张');  
						return false;  
					}  
					for(var i in e.files) {  
						var imgUrl = e.files[i];  
						var imgName = imgUrl.substr(imgUrl.lastIndexOf('/') + 1);  
						if(i == 0) {  
							bg_img_set(imgUrl, removeFileSuffix(imgName));  
						}  
						uploadMatchPicture(imgUrl, imgName);  
					}  
				}, function(e) {  
					mui.toast("取消选择图片");  
				}, {  
					filter: "image",  
					multiple: true  
				});  
			} else {  
				//有固定控件的change事件触发;  
			}  
		};  

重点是调用后改方式返回的图片链接进行canvas压缩的toDataURL就会报错:Script error.filename:lineno:0
代码如下:

            //将图片压缩转成base64    
	function getBase64Image(img) {			  
		var canvas = document.createElement("canvas");  
		var width = img.width;  
		var height = img.height;  
		var defualtvalue = 1500;  
		//console.log(width+"___"+height);  
		if(width > defualtvalue && height > defualtvalue) {  
			if(width > height) {  
				if(width > defualtvalue) {  
					height = Math.round(height *= defualtvalue / width);  
					width = defualtvalue;  
				}  
			} else {  
				if(height > defualtvalue) {  
					width = Math.round(width *= defualtvalue / height);  
					height = defualtvalue;  
				}  
			}  
		}  
		canvas.width = width; /*设置新的图片的宽度*/  
		canvas.height = height; /*设置新的图片的长度*/			  
		var ctx = canvas.getContext("2d");			  
		ctx.drawImage(img, 0, 0, width, height); /*绘图*/  
		console.log("运行到这来的时候不会出错")  
		//这里使用toDataURL输出64位图片  
		var dataURL = canvas.toDataURL("image/png", 0.8);	  
		console.log("没有输出该句,报错了");  
		return dataURL;  
	  
	}  

这是什么原因呢,头发都要掉光了。麻烦帮我看下是什么原因呢 为啥使用h5+API后toDataURL就报错。我直接采用网上链接的图片进行canvas压缩就不会报错。

2019-10-21 18:39 负责人:无 分享
已邀请:
DCloud_heavensoft

DCloud_heavensoft

  • 1***@qq.com (作者)

    因为是mui APP不是采用插件,使用plus的bitmap可以生成base64图片。但是我们就是想用canvas进行裁剪生成图片,不是单单生成base64图片。那这样子情况又该怎么裁剪了呢??


    2019-10-22 14:30

  • DCloud_heavensoft

    回复 1***@qq.com: 换回uiWebview


    2019-10-22 16:56

  • 1***@qq.com (作者)

    回复 DCloud_heavensoft: 要是以后苹果停止使用UIWebview的应用,那这种情况该怎么办呢?目前换回uiWebview只能解决目前问题呢?


    2019-10-22 17:12

2***@qq.com

2***@qq.com

目前我出现的问题和你一样的,请问找到解决办法了吗

  • 1***@qq.com (作者)

    官方说换回uiWebview,我现在就先暂时换回来了。要是之后苹果停止用了也就用不了了,问了官方也没有回复。


    2019-10-29 17:35

chinahappybeer

chinahappybeer - china happy beer

目前我出现的问题和你一样的,请问找到解决办法了吗

1***@qq.com

1***@qq.com

大哥问题解决来吗 我也一样出现这个

bishuihanshan

bishuihanshan

我也遇到这个问题了,还不知道怎么处理,mark一下

前端开发者福建

前端开发者福建

我不太确定问题是不是同一个,不过你可以尝试一下,在图片渲染完成后在调用getBase64Image

该问题目前已经被锁定, 无法添加新回复