我正在使用电容器插件来获取图像文件(从相机或画廊)。 PC和Android可以正常运行,但是代码在iPhone上崩溃。
它打开图库,我抓住图像,尝试显示时崩溃
我检查了权限,它们都已设置。 为什么只在ios上崩溃?字符串有问题吗?安全吗?
HTML:
< ion-img role="button" class="image" [src]="selectedImage" *ngIf="selectedImage" >
TS代码:
Plugins.Camera.getPhoto({
quality: 100,
source: CameraSource.Prompt,
correctOrientation: true,
allowEditing: false,
resultType: CameraResultType.Base64
})
.then(image => {
this.selectedImage = image.base64Data; // VAR TO DISPLAY IN HTML
})
错误日志 https://i.imgur.com/jrSgGeW.jpg
编辑:现在,我使用DomSanitizer和SafeResourceUrl进行变量设置。错误停止了,但是图像仍然无法显示
答案 0 :(得分:1)
要显示图像而不使用base64
数据,请使用DataUrl
resultType。
对于您的代码示例,应该是
Plugins.Camera.getPhoto({
quality: 100,
source: CameraSource.Prompt,
correctOrientation: true,
allowEditing: false,
resultType: CameraResultType.DataUrl
})
.then(image => {
this.selectedImage = image.dataUrl; // VAR TO DISPLAY IN HTML
})
但是,当您使用Angular时,建议清理数据,应该是这样的:
this.selectedImage = this.sanitizer.bypassSecurityTrustResourceUrl(image && (image.dataUrl));
在https://capacitor.ionicframework.com/docs/guides/ionic-framework-app上查看完整的离子角示例
答案 1 :(得分:0)
更改此行
this.selectedImage = "data:image/jpeg;base64, " + image.base64Data;
答案 2 :(得分:0)
摘自官方文档:
组件:
public getImage(){
const options: CameraOptions = {
quality: 100,
destinationType: this.camera.DestinationType.DATA_URL,
encodingType: this.camera.EncodingType.JPEG,
mediaType: this.camera.MediaType.PICTURE
}
this.camera.getPicture(options).then((imageData) => {
// imageData is either a base64 encoded string or a file URI
// If it's base64 (DATA_URL):
let base64Image = 'data:image/jpeg;base64,' + imageData;
}, (err) => {
// Handle error
});
}
HTML
<img src={base64Image} />
答案 3 :(得分:0)
我遇到了同样的问题,但是在相机选项中更改照片的尺寸对我来说确实有用。我使用的是Cordova,但我会尽力将其转换为电容器。希望这会有所帮助!
科尔多瓦:
const options: CameraOptions = {
quality: 75,
destinationType: this.camera.DestinationType.DATA_URL,
encodingType: this.camera.EncodingType.JPEG,
mediaType: this.camera.MediaType.PICTURE,
saveToPhotoAlbum: true,
correctOrientation: true,
targetHeight: 1024,
targetWidth: 768
}
电容器:
const image = await Camera.getPhoto({
quality: 75,//Test
source: CameraSource.Prompt,
correctOrientation: true,
allowEditing: false,
resultType: CameraResultType.Base64
height : 1024,//Test
width : 768//Test
}
电容器文档here。
答案 4 :(得分:0)
HTML:
<img class="ox-picture" [src]="display(b64)"/>
TS:
constructor(public dms: DomSanitizer) {}
display(b64: string) {
return this.dms.bypassSecurityTrustUrl("data:image/jpeg;base64," + b64);
}