ToB企服应用市场:ToB评测及商务社交产业平台
标题:
HarmonyOS NEXT图片选择和下载保存案例
[打印本页]
作者:
饭宝
时间:
2024-9-19 16:54
标题:
HarmonyOS NEXT图片选择和下载保存案例
先容
本示例先容图片相关场景的使用:包罗访问手机相册图片、选择预览图片并显示选择的图片到当前页面,下载并保存网络图片得手机相册或到指定用户目录两个场景。
结果图预览
使用说明
从主页通用场景集里选择
图片选择和下载保存
进入首页。
分两个场景
点击“+”进入”访问手机相册图片预览并选择”场景示例。
点击上部“下载”按钮进入”下载网络图片得手机相册”场景示例;点击下部“下载到指定路径”按钮进入”下载文件到指定用户目录”场景示例。
实现思绪
场景1:访问手机相册图片预览并选择
通过photoViewPicker.select()拉起图库界面,用户可以预览并选择一个或多个文件,即可实现拉起手机相册并进行图片的预览与选择。
创建文件范例为图片的,并最大预览数目为2的图库实例。
async getFileAssetsFromType(){
const photoSelectOptions = new picker.PhotoSelectOptions(); // 创建图库对象实例
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 选择媒体文件类型为Image
photoSelectOptions.maxSelectNumber = 2; // 选择媒体文件的最大数目
}
复制代码
通过photoViewPicker.select()接口,通过传入参数PhotoSaveOptions图库对象,获取返回的用户选择的图片信息。
async getFileAssetsFromType(){
photoViewPicker.select(photoSelectOptions)
.then((photoSelectResult) => {
this.uris = photoSelectResult.photoUris; // select返回的uri权限是只读权限,需要将uri写入全局变量@State中即可根据结果集中的uri进行读取文件数据操作。
})
.catch((err: BusinessError) => {
console.log('Invoke photoViewPicker.select failed, code is ${err.code},message is ${err.message}');
})
}
复制代码
场景2:下载并保存网络图片
通过http中request方法获取在线图片数据。
http.createHttp()
.request('https://gitee.com/openharmony/applications_app_samples/raw/master/code/Solutions/Shopping/OrangeShopping/feature/navigationHome/src/main/resources/base/media/product002.png',
(error: BusinessError, data: http.HttpResponse) => {
if (error) {
promptAction.showToast({
message: $r('app.string.image_request_fail'),
duration: 2000
})
return
}
this.transcodePixelMap(data);
if (data.result instanceof ArrayBuffer) {
this.imageBuffer = data.result as ArrayBuffer;
}
})
复制代码
使用createPixelMap方法将获取到的图片数据转换成pixelmap展示到页面中
// 将ArrayBuffer类型的图片装换为PixelMap类型
transcodePixelMap(data: http.HttpResponse) {
let code: http.ResponseCode | number = data.responseCode;
if (ResponseCode.ResponseCode.OK === code) {
let imageData: ArrayBuffer = data.result as ArrayBuffer;
let imageSource: image.ImageSource = image.createImageSource(imageData);
class tmp {
height: number = 100;
width: number = 100;
};
let options: Record<string, number | boolean | tmp> = {
'alphaType': 0, // 透明度
'editable': false, // 是否可编辑
'pixelFormat': 3, // 像素格式
'scaleMode': 1, // 缩略值
'size': { height: 100, width: 100 }
}; // 创建图片大小
imageSource.createPixelMap(options).then((pixelMap: PixelMap) => {
this.image = pixelMap;
this.isShow = true
});
}
}
复制代码
将图片保存到图库或者用户选择的路径
使用getPhotoAccessHelper、createAsset、fs.open、fs.write等接口将数据存到本地图库中
async saveImage(buffer: ArrayBuffer | string): Promise<void> {
let context = getContext(this) as common.UIAbilityContext;
let helper = photoAccessHelper.getPhotoAccessHelper(context);
let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
await fs.write(file.fd, buffer);
await fs.close(file.fd);
}
复制代码
使用photoViewPicker.save、fs.open、fs.write等接口将数据存到用户选择路径的数据库中
async pickerSave(buffer: ArrayBuffer | string): Promise<void> {
const photoSaveOptions = new picker.PhotoSaveOptions(); // 创建文件管理器保存选项实例
photoSaveOptions.newFileNames = ['PhotoViewPicker ' + new Date().getTime() + 'jpg'] // 保存文件名(可选)
const photoViewPicker = new picker.PhotoViewPicker;
photoViewPicker.save(photoSaveOptions)
.then(async (photoSvaeResult) => {
console.info('PhotoViewPicker.save successfully,photoSvaeResult uri:' + JSON.stringify(photoSvaeResult));
let uri = photoSvaeResult[0];
let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
await fs.write(file.fd, buffer);
await fs.close(file.fd);
promptAction.showToast({
message: $r('app.string.image_request_success'),
duration: 2000
})
})
}
复制代码
高性能知识点
不涉及
工程结构&模块范例
picturemanage // har类型
|---src/main/ets/components
| |---SelectPictures.ets // 场景一:访问手机相册图片预览并选择
| |---SaveNetWorkPictures.ets // 场景二:下载网络图片并保存到手机相册或用户选择的文件夹
| |---PictureManage.ets // 视图层-主页面,三个场景入口
复制代码
模块依赖
依赖har包-common库中UX标准
最后:
有很多小同伴不知道学习哪些鸿蒙开辟技术?不知道需要重点掌握哪些鸿蒙应用开辟知识点?而且学习时频仍踩坑,最终浪费大量时间。以是有一份实用的
鸿蒙(HarmonyOS NEXT)资料
用来跟着学习是非常有须要的。
这份鸿蒙(HarmonyOS NEXT)资料包罗了鸿蒙开辟必掌握的核心知识要点,内容包罗了
(
ArkTS、ArkUI开辟组件、Stage模子、多端部署、分布式应用开辟、音频、视频、WebGL、OpenHarmony
多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开辟、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)
技术知识点。
盼望这一份鸿蒙学习资料可以或许给各人带来帮助,有需要的小同伴自行领取,
限时开源,先到先得~无套路领取!!
如果你是一名有经验的资深Android移动开辟、Java开辟、前端开辟、对鸿蒙感爱好以及转行人员,可以直接领取这份资料
获取这份完整版高清学习路线,请点击→
纯血版全套鸿蒙HarmonyOS学习资料
鸿蒙(HarmonyOS NEXT)最新学习路线
HarmonOS基础技能
HarmonOS就业必备技能
HarmonOS多媒体技术
鸿蒙NaPi组件进阶
HarmonOS高级技能
初识HarmonOS内核
实战就业级装备开辟
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的
鸿蒙(OpenHarmony )学习手册(共计1236页)
与
鸿蒙(OpenHarmony )开辟入门教学视频
,内容包罗:
ArkTS、ArkUI、Web开辟、应用模子、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
《鸿蒙 (OpenHarmony)开辟入门教学视频》
《鸿蒙生态应用开辟V2.0白皮书》
《鸿蒙 (OpenHarmony)开辟基础到实战手册》
OpenHarmony北向、南向开辟环境搭建
《鸿蒙开辟基础》
ArkTS语言
安装DevEco Studio
运用你的第一个ArkTS应用
ArkUI声明式UI开辟
.……
《鸿蒙开辟进阶》
Stage模子入门
网络管理
数据管理
电话服务
分布式应用开辟
关照与窗口管理
多媒体技术
安全技能
使命管理
WebGL
国际化开辟
应用测试
DFX面向未来计划
鸿蒙系统移植和裁剪定制
……
《鸿蒙进阶实战》
ArkTS实践
UIAbility应用
网络案例
……
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对厘革,不断学习和提升本身,他们才气在这个厘革的期间中立于不败之地。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4