HarmonyOS 鸿蒙Next Web 展示相册中的图片
从相册中选择文件,在H5 页面上展示。现在可以从相册中返回数据,但是在 H5 上图片显示不出来,直接图裂了
下面是选择图片的代码
// maxSelectNumber: 可以根据最大可选择的图片数量进行传值配置
private onPhotoBtnClick(maxSelectNumber: number, callbackContext: CallbackContext) {
try {
// 通过picker拉起图库的图片
let photoOption = new picker.PhotoSelectOptions(); // 创建图库对象实例
photoOption.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择文件类型为IMAGE
photoOption.maxSelectNumber = maxSelectNumber; // 选择图片的最大数目
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select(photoOption).then((photoResult) => {
let infoW: number = 0;
let infoH: number = 0;
try {
let file = fileIo.openSync(photoResult.photoUris[0], fileIo.OpenMode.READ_ONLY);
const imageSourceApi = image.createImageSource(file.fd);
imageSourceApi.getImageInfo(0, (error: BusinessError, imageInfo) => {
if (imageInfo == undefined) {
CordovaLog.e(Constants.TAG ,`Failed to get imageInfo by callbak. Code: ${error.code}, message: ${error.message}`);
return;
}
infoW = imageInfo.size.width;
infoH = imageInfo.size.height;
})
} catch (error) {
CordovaLog.e(Constants.TAG ,`Failed to get imageInfo. Code: ${error.code}, message: ${error.message}`);
callbackContext.errorByJson(error)
return;
}
try {
// 返回给前端的值
this.callbackPhotoUris(photoResult.photoUris, callbackContext)
} catch (error) {
CordovaLog.e(Constants.TAG ,`Failed to decode. Code: ${error.code}, message: ${error.message}`);
callbackContext.errorByJson(error)
}
})
} catch (error) {
CordovaLog.e(Constants.TAG ,`Failed to select photo. Code: ${error.code}, message: ${error.message}`);
callbackContext.errorByJson(error)
}
}
private callbackPhotoUris(photoUris: Array<string>, callbackContext: CallbackContext) {
let result: Array<object> = []
let cacheDir = this.cordova?.getAbilityContext().cacheDir;
photoUris.forEach((photoUri, index) => {
let splitArray = photoUri.split('/')
let randomXIndex = Math.trunc(1000 * Math.random());
let fileName = randomXIndex + '_' + splitArray[splitArray.length - 1]
let cacheFullPath = cacheDir + '/' + fileName
let file = fs.openSync(photoUri, fs.OpenMode.CREATE);
// 复制文件到缓存目录下
fs.copyFileSync(file.fd, cacheFullPath)
//internal://cache代表fullPath 的文件路径
let cachePath = `internal://cache/${fileName}`
result.push(new Object({
path: cachePath, uri: cachePath,
size: 0, file_length: 0, name: fileName,
index: index, mediaType: 'image'
}))
})
callbackContext.successByJson(result)
}
下面是 H5 展示的代码
// html
<img :src="imgUrl" @click="fileOperation(file)">
// js
let pic = new UploadMedia(objThis,{photoOptions:{maxSelectCount: 1}})
pic.getCustomPhoto(results=>{
objThis.imgUrl = results[0].uri
objThis.changeImg = true
// this.harmonyPreviewImage()
},error=>{
objThis.$root.toast('选取照片错误:' + error)
})
更多关于HarmonyOS 鸿蒙Next Web 展示相册中的图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next Web 展示相册中的图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next Web展示相册中的图片,可以通过以下步骤实现:
-
获取相册权限:首先,需要在应用的manifest文件中声明访问相册的权限。这通常包括读取存储空间的权限。
-
选择图片:使用鸿蒙系统提供的媒体选择器API,让用户从相册中选择图片。该API会返回一个包含所选图片路径的列表。
-
加载图片:利用鸿蒙系统的图片加载组件,如Image,将用户选择的图片路径设置给该组件的src属性。鸿蒙系统提供了高效的图片加载和缓存机制,以确保图片的流畅显示。
-
展示图片:将加载的图片组件添加到页面的布局中,即可在Next Web页面上展示用户选择的相册图片。
-
处理异常:在加载和展示图片的过程中,需要处理可能发生的异常,如权限被拒绝、图片路径无效等。
示例代码(伪代码):
// 假设已有选择图片的函数selectImage()
selectImage().then(imagePaths => {
imagePaths.forEach(path => {
let imageElement = document.createElement('image');
imageElement.src = path;
document.body.appendChild(imageElement);
});
}).catch(error => {
console.error('Error loading images:', error);
});
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html