首页 > 分享 > HarmonyOS NEXT开发实战教程:选择相册和拍照

HarmonyOS NEXT开发实战教程:选择相册和拍照

今天的内容是介绍在鸿蒙开发中从相册选择照片,和调用相机拍照,并使用这两个功能实现朋友圈编辑页面。

这部分内容没什么好废话的,都是固定用法,直接上代码。

首先添加权限:

ohos.permission.CAMERA ohos.permission.READ_IMAGEVIDEO

选择相册:​

async getAlbum() { const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions(); photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目 let uris: Array<string> = []; const photoViewPicker = new photoAccessHelper.PhotoViewPicker(); photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => { uris = photoSelectResult.photoUris; uris.forEach(element => { this.photoList.push(element) }); console.info('photoViewPicker.select to file succeed and uris are:' + uris); }).catch((err: BusinessError) => { console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`); }) }

调用相机:​

async invokeCamera(callback: (uri: string) => void) { try { let pickerProfile: cameraPicker.PickerProfile = { cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK }; let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(getContext(), [cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO], pickerProfile); console.log("the pick pickerResult is:" + JSON.stringify(pickerResult)); if (callback && pickerResult) { callback(pickerResult.resultUri); } } catch (error) { let err = error as BusinessError; console.error(`the pick call failed. error code: ${err.code}`); } }

整个页面完整代码如下:​

import { photoAccessHelper } from '@kit.MediaLibraryKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { cameraPicker } from '@kit.CameraKit'; import { camera } from '@kit.CameraKit'; import { AlertSheet } from './AlertSheet'; @Entry @Component struct Index { @State photoList:string[] = [] dialogController: CustomDialogController | null = new CustomDialogController({ builder: AlertSheet({titles:['拍照','相册'],itemClick:(str)=>{ switch (str){ case '拍照': this.invokeCamera((url)=>{ this.photoList.push(url) }) break; case '相册': this.getAlbum() break; } }}), alignment: DialogAlignment.Bottom, offset: { dx: 0, dy: -25 } }) async getAlbum() { const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions(); photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目 let uris: Array<string> = []; const photoViewPicker = new photoAccessHelper.PhotoViewPicker(); photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => { uris = photoSelectResult.photoUris; uris.forEach(element => { this.photoList.push(element) }); console.info('photoViewPicker.select to file succeed and uris are:' + uris); }).catch((err: BusinessError) => { console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`); }) } async invokeCamera(callback: (uri: string) => void) { try { let pickerProfile: cameraPicker.PickerProfile = { cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK }; let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(getContext(), [cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO], pickerProfile); console.log("the pick pickerResult is:" + JSON.stringify(pickerResult)); if (callback && pickerResult) { callback(pickerResult.resultUri); } } catch (error) { let err = error as BusinessError; console.error(`the pick call failed. error code: ${err.code}`); } } build() { Column(){ TextArea({placeholder:'这一刻的想法'}) .placeholderFont({size:16}) .placeholderColor('rgb(188,188,188)') .width('100%') .height(100) .backgroundColor(Color.White) Grid(){ ForEach(this.photoList,(str:string,index)=>{ GridItem(){ Image(str) .width(90) .height(90) } }) GridItem(){ Image($r('app.media.add')) .width(90) .height(90) .onClick(()=>{ this.dialogController?.open() }) } } .columnsGap(10) .rowsGap(10) .columnsTemplate('1fr 1fr 1fr 1fr') } .padding({left:15,right:15,top:40}) } }

相关知识

共码未来,花开烂漫:近千名开发者齐聚 9 地欢度 1024 程序员节
NocoBase 实战教程 —— 任务管理系统
智能手机拍照识别各种植物教程,让你轻松认识身边的各种花草
拍照识花怎么用 拍照识花使用方法介绍
如何拍出唯美花卉照片 实战技巧教程
摄影实战汇编
uniapp+vue3+云开发全栈开发同城配送鲜花小程序任意商城基础入门到实战
喜欢一个人的相册
《Python机器学习开发实战》电子书在线阅读
nuxt

网址: HarmonyOS NEXT开发实战教程:选择相册和拍照 https://m.huajiangbk.com/newsview356856.html

所属分类:花卉
上一篇: vue3
下一篇: 短视频拍摄教程