以离子方式显示来自设备的图像
Displaying image from device in ionic
假设我在 file:///storage/emulated/0/Android/data/io.ionic.starter/cache/1542035689920.jpg
路径下有一张图片。是否可以通过分配 .url
属性 在 <image>
标签中显示此图像?可能不会,如果有的话,有什么好的解决方案吗?我正在尝试在列表中制作图像的缩略图,我这样做的方法是将图像读取为 base64,使用 canvas 转换它然后显示它。问题是渲染所有图像需要太多时间。
ionViewDidLoad() {
this.defectImages.forEach(defectImage => this.loadThumbnail(defectImage.url))
}
loadThumbnail(url) {
return this.fileProvider.getDefectCachedImage(url)
.then(data => {
return this.generateFromImage(data, 400, 400, 0.5, thumbnail => {
let image = document.getElementById(url) as any;
image.src = thumbnail;
})
});
}
showImage(url: string) {
this.photoViewer.show(this.fileProvider.getCacheFolderPath() + url, '', {share: true})
}
generateFromImage(img, MAX_WIDTH: number = 700, MAX_HEIGHT: number = 700, quality: number = 0.5, callback) {
var canvas: any = document.createElement("canvas");
var image = new Image();
image.onload = () => {
var width = image.width;
var height = image.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0, width, height);
// IMPORTANT: 'jpeg' NOT 'jpg'
var dataUrl = canvas.toDataURL('image/jpeg', quality);
callback(dataUrl)
};
image.src = img;
}
正在运行,但运行速度太慢。我注意到 PhotoLibrary 包,但据我所知,它可以访问共享内存,我的照片仅保存在应用程序中 space。
这是最新网页视图的问题。最新的 webview 不允许加载本地资源。它在 Ionic 2 上运行良好。虽然不是最佳解决方案,但我正在粘贴对我有用的解决方案。
ionic cordova plugins rm cordova-plugin-ionic-webview
ionic cordova plugins add cordova-plugin-ionic-webview@1.2.1
cordova clean android
您可以构建(ionic cordova build android) 应用程序并对其进行测试。
file:///storage/emulated/0/Android/data/io.ionic.starter/cache/1542035689920.jpg
路径下有一张图片。是否可以通过分配 .url
属性 在 <image>
标签中显示此图像?可能不会,如果有的话,有什么好的解决方案吗?我正在尝试在列表中制作图像的缩略图,我这样做的方法是将图像读取为 base64,使用 canvas 转换它然后显示它。问题是渲染所有图像需要太多时间。
ionViewDidLoad() {
this.defectImages.forEach(defectImage => this.loadThumbnail(defectImage.url))
}
loadThumbnail(url) {
return this.fileProvider.getDefectCachedImage(url)
.then(data => {
return this.generateFromImage(data, 400, 400, 0.5, thumbnail => {
let image = document.getElementById(url) as any;
image.src = thumbnail;
})
});
}
showImage(url: string) {
this.photoViewer.show(this.fileProvider.getCacheFolderPath() + url, '', {share: true})
}
generateFromImage(img, MAX_WIDTH: number = 700, MAX_HEIGHT: number = 700, quality: number = 0.5, callback) {
var canvas: any = document.createElement("canvas");
var image = new Image();
image.onload = () => {
var width = image.width;
var height = image.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0, width, height);
// IMPORTANT: 'jpeg' NOT 'jpg'
var dataUrl = canvas.toDataURL('image/jpeg', quality);
callback(dataUrl)
};
image.src = img;
}
正在运行,但运行速度太慢。我注意到 PhotoLibrary 包,但据我所知,它可以访问共享内存,我的照片仅保存在应用程序中 space。
这是最新网页视图的问题。最新的 webview 不允许加载本地资源。它在 Ionic 2 上运行良好。虽然不是最佳解决方案,但我正在粘贴对我有用的解决方案。
ionic cordova plugins rm cordova-plugin-ionic-webview
ionic cordova plugins add cordova-plugin-ionic-webview@1.2.1
cordova clean android
您可以构建(ionic cordova build android) 应用程序并对其进行测试。