中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
本文原创发布在华为开发者社区。
本示例基于媒体文件管理服务,实现了管理相册、照片和视频的功能。图片管理对图片像素数据进行解析、处理、构造的过程,达到目标图片效果,主要涉及图片解码、图片处理、图片编码等。
实现文件图片管理功能源码链接
如果在运行该示例代码时,出现运行不了的情况,可尝试选择DevEco Studio菜单栏Build里面的Clean Project选项,来清理工程。
try拉起文件/图片选择
let photoSelectResult = await photoPicker.select(photoSelectOptions); // 拉起图片选择框 if (photoSelectResult && photoSelectResult.photoUris && photoSelectResult.photoUris.length > 0) { let imgUris = photoSelectResult.photoUris; for (let imgUri of imgUris) { if (imgUri.indexOf('media/Photo')<0) { promptAction.showToast({message: '请选择图片进行上传'}) return []; } } return imgUris;
保存图像
async savePhotoToGallery(context: common.UIAbilityContext) { let helper = photoAccessHelper.getPhotoAccessHelper(context); try { // onClick触发后5秒内通过createAsset接口创建图片文件,5秒后createAsset权限收回。 let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg'); // 使用uri打开文件,可以持续写入内容,写入过程不受时间限制 let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); const arrayBuffer = await context.resourceManager.getMediaContent($r('app.media.startIcon').id, 0) // 往打开的文件写入 arrayBuffer fileIo.writeSync(file.fd, arrayBuffer.buffer) // 写完后,主动关闭文件 await fileIo.close(file.fd) promptAction.showToast({ message: '已保存至相册!' }); } catch (error) { const err: BusinessError = error as BusinessError; console.error(`Failed to save photo. Code is ${err.code}, message is ${err.message}`); } }
微信扫码分享