【发布时间】:2017-09-15 17:23:36
【问题描述】:
当我使用本地图像时,canvas.toDataURL("image/jpg") 正在工作。
赞这个this.originalImage = 'assets/img/defaultImage-900.jpg';
当我将其更改为相机中的图片时,它无法正常工作。
赞这个this.originalImage = "data:image/jpeg;base64," + imageData;
我在 Xcode 中遇到的错误是 {"code":18,"name":"SecurityError","message":"The operation is insecure.","line":40830,"column":61,"sourceURL":"http://localhost:8080/var/containers/Bundle/Application/4FDE886B-8A64-46AD-8E0C-FDA23C5218CD/Oslo%20Origo.app/www/build/main.js"}
这在我更新到 iOS 10.3.1 之前有效... 我该如何解决?
我想要做的是将两张图像 (900x900) 合并为一张图像。
save() {
//get filter index
this.selectedFilter = this.slides.getActiveIndex();
// run the canvas thing
this.applyFilter(this.filters[this.selectedFilter]).subscribe(() => {
//done
});
}
在this.originalImage(来自相机的base64图像)上应用过滤器
applyFilter(filterUrl: string) {
return Observable.create((observer: any) => {
let baseImg = new Image();
let filterImg = new Image();
let canvas = document.createElement('canvas');
var ctx = canvas.getContext("2d");
baseImg.src = this.originalImage;
baseImg.onload = () => {
canvas.width = baseImg.width;
canvas.height = baseImg.height;
ctx.drawImage(baseImg, 0, 0);
filterImg.src = filterUrl;
filterImg.onload = () => {
let hRatio = canvas.width / filterImg.width;
let vRatio = canvas.height / filterImg.height;
let ratio = Math.max(hRatio, vRatio);
let centerShift_x = (canvas.width - filterImg.width * ratio) / 2;
let centerShift_y = (canvas.height - filterImg.height * ratio) / 2;
ctx.drawImage(filterImg, 0, 0, filterImg.width, filterImg.height, centerShift_x, centerShift_y, filterImg.width * ratio, filterImg.height * ratio);
try{
this.resultImage = canvas.toDataURL("image/jpg");
} catch (error){
console.log(error)
}
observer.next();
}
};
});
}
相机设置
// set options
let options = {
quality : 30,
destinationType : Camera.DestinationType.DATA_URL,
sourceType : 1,
allowEdit : true,
encodingType: Camera.EncodingType.JPEG,
cameraDirection: Camera.Direction.FRONT,
correctOrientation: true,
saveToPhotoAlbum: false,
targetHeight: 900,
targetWidth: 900
};
Camera.getPicture(options).then((imageData) => {
this.zone.run(() => {
this.originalImage = "data:image/jpeg;base64," + imageData;
});
}, (err) => {
if(this.originalImage == null || undefined){
this.navCtrl.setRoot(SocialTabsPage, { tabIndex: 0 });
}
});
【问题讨论】:
-
不工作是什么意思?您能否解释正在发生的错误,或者请给出日志语句?
-
Xcode 没有给我任何形式的错误...只是停止运行。我在
this.resultImage = canvas.toDataURL("image/jpg");之前 console.log 的所有内容都运行良好。此行未运行后... -
我没有更新问题。添加了 try {} 函数。
The operation is insecure. -
您是否使用 WKWebView 来显示您的画布?
-
其实,这听起来像是 CORS 问题(跨域资源共享)...您是否尝试过将图像从相机保存到文档目录。然后拉图像数据?另外,请尝试
webView.configuration.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs")来帮助处理 CORS
标签: javascript ios cordova ionic2 todataurl