鸿蒙next 带你玩转鸿蒙拍照和相册获取图片

news2024/12/26 12:26:08
前言导读

各位网友和同学,相信大家在开发app的过程中都有遇到上传图片到服务器的需求,我们一般是有两种方式,拍照获取照片或者调用相册获取照片,今天我们就分享一个小案例讲一下这两种情况的实现。废话不多说我们正式开始

效果图

在这里插入图片描述nimg.cn/direct/f9b831e0d5cf41c484dd1fced7c58385.gif)
在这里插入图片描述

具体实现
  • 从相册获取照片
export async function fileSelect(): Promise<string> {
  let photoSelectOptions = new picker.PhotoSelectOptions();
  photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
  photoSelectOptions.maxSelectNumber = 1;
  let photoPicker = new picker.PhotoViewPicker();
  try {
    let photoSelectResult = await photoPicker.select(photoSelectOptions);
    if (photoSelectResult && photoSelectResult.photoUris && photoSelectResult.photoUris.length > 0) {
      let imgUri = photoSelectResult.photoUris[0];
      if (imgUri.indexOf('media/Photo')<0) {
        showToast($r('app.string.prompt_select_img'));
        return '';
      }
      return photoSelectResult.photoUris[0];
    } else {
      return '';
    }
  } catch (err) {
    Logger.error('SelectedImage failed', JSON.stringify(err));
    return '';
  }
}

  • 拍照获取照片
export async function cameraSelect(cameraPosition: Array<camera.CameraPosition>,
  mediaType: Array<cameraPicker.PickerMediaType>,context:Context): Promise<string> {
  try {
    let pickerProfile: cameraPicker.PickerProfile = { cameraPosition: cameraPosition[1] };
    let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(context,
      [mediaType[0]], pickerProfile);
    let uri = pickerResult.resultUri;
    return uri;
    hilog.info(0x0000, ' ', "the pick pickerResult is:" + JSON.stringify(pickerResult));
  } catch (error) {
    let err = error as BusinessError;
    Logger.error( `the pick call failed. error code: `);
    return '';
  }

}
界面实现

在这里插入图片描述


import { cameraPicker } from '@kit.CameraKit';
import { camera } from '@kit.CameraKit';
import { cameraSelect, fileSelect } from './Camerautils';

@Entry
@Component
struct Index {

  @State imageUri: Resource | string | undefined = undefined;
  private  cameraPosition: Array<camera.CameraPosition> = [
    camera.CameraPosition.CAMERA_POSITION_UNSPECIFIED, camera.CameraPosition.CAMERA_POSITION_BACK,
    camera.CameraPosition.CAMERA_POSITION_FRONT, camera.CameraPosition.CAMERA_POSITION_FOLD_INNER
  ];
 private  mediaType: Array<cameraPicker.PickerMediaType> = [
    cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO
  ];

  selectImage() {
    fileSelect().then((uri: string) => {
      this.imageUri = uri || '';
    });
  }
  openphoto(){
    cameraSelect(this.cameraPosition,this.mediaType,getContext(this)).then((uri: string) => {
      this.imageUri = uri || '';
    });
  }


  build() {
    Row() {
      Column() {
        Image(this.imageUri)
          .height(200)
          .alt($r('app.media.startIcon'))
         Button("从相册获取")
           .width(200)
           .margin({ top: 20})
           .onClick(()=>{
             this.selectImage()
           })
      Button("拍照")
        .width(200)
        .margin({ top: 20})
        .onClick(async () => {
         this.openphoto()
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

我们在主界面写2个button来触发我们拍照动作和我们的从相册获取, 拍照的时候我们是需要去申请权限,获取到权限之后才能拍照拿到对应的照片。这里需要强调 无论是从相册获取照片还是拍照获取照片都是需要真机, 并且是next系统,鸿蒙4.2版本上面代码会报错api不同。我们拿到图片的uri然后通过赋值给我们的装饰器 ,来刷新我们image组件来显示。

最后总结

鸿蒙next 无论是拍照获取照片uri 还是从相册获取照片uri 都比较简单,大家有真机的可以去尝试,获取到照片然后提交给服务器把整个前后端的交互完善 。 如果有其他的需求方面可以在文章地下留言。老师看到了都会回复的,更多鸿蒙next 开发相关知识的学习和交流都可以关注我掘金专栏或者B站的课程。

如果需要学习更多鸿蒙的知识可以关注我B站教程

课程地址

B站课程地址:www.bilibili.com/cheese/play…

项目内容:

团队介绍

团队介绍:作者: 坚果派-徐庆 坚果派由坚果等人创建,团队由12位华为HDE以及若干热爱鸿蒙的开发者和其他领域的三十余位万粉博主运营。专注于分享 HarmonyOS/OpenHarmony,ArkUI-X,元服务,仓颉,团队成员聚集在北京,上海,南京,深圳,广州,宁夏等地,目前已开发鸿蒙 原生应用,三方库60+,欢迎进行课程,项目等合作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 环境永久更换国内pip镜像源地址

1、PYPI国内源路径 &#xff08;清华镜像地址&#xff09; https://pypi.tuna.tsinghua.edu.cn/simple/ &#xff08;中科大镜像地址&#xff09;或者 https://pypi.mirrors.ustc.edu.cn/simple/ &#xff08;阿里云镜像地址&#xff09;或者 https://mirrors.aliyun.com/py…

240922-局域网内通过SSH与SFTP访问RHEL服务器

要通过SFTP&#xff08;安全文件传输协议&#xff09;在局域网内访问一台RHEL服务器&#xff0c;您需要确保以下步骤都已经正确完成&#xff1a; A. 在RHEL服务器上配置SFTP服务 RHEL默认通过sshd服务提供SFTP功能&#xff0c;SFTP使用SSH协议进行文件传输&#xff0c;因此需要…

JAVA自助高效安全无人台球茶室棋牌室系统小程序源码

​探索“自助高效安全无人台球茶室棋牌室系统”的奇妙之旅 &#x1f3b1;&#x1f375;&#x1f3b2; &#x1f50d; 初见惊艳&#xff1a;未来娱乐新体验 &#x1f50d; 走进这家无人值守的台球茶室棋牌室&#xff0c;第一感觉就像是穿越到了未来&#xff01;没有繁琐的前台登…

tornado

Tornado通过使用非阻塞网络1/0&#xff0c;可以扩展到数以万计的开放链接&#xff0c;非常适合 长时间轮询&#xff0c;WebSockets和其他需要与每个用户建立长期连接的应用程序。 特点 注重性能优越&#xff0c;速度快解决高并发异步非阻塞websockets 长连接内嵌了HTTP服务器…

jdk11特性介绍

JDK 11&#xff08;也称为Java 11&#xff09;是Java平台的一个重要版本&#xff0c;它引入了许多新特性和改进&#xff0c;旨在提高开发者的生产力和Java平台的性能。以下是一些JDK 11的主要特性&#xff1a; 局部变量类型推断&#xff08;Local-Variable Syntax for Lambda P…

VMWare虚拟机安装CentOS-7-x86_64-DVD-1611操作系统

VMWare虚拟机安装CentOS7操作系统 1、虚拟机准备打开VMware单机创建新的虚拟机典型与自定义安装选择虚拟机硬件兼容性选择安装程序光盘映射文件(iso)选择客户机操作系统命名虚拟机处理器配置内存配置网络连接类型I/O类型选择磁盘类型选择磁盘指定磁盘的最大磁盘大小磁盘名称我们…

【Python报错已解决】TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

element-ui 日期选择器禁用某段特定日期

element-ui 日期选择器设置禁用日期 效果图如下: 2024-09-01 到2024-09-18之间的日期都不可选 2024-01-01之前的日期都不可选 官方文档中 picker-options 相关的介绍 实现功能: ​ 某仓库有限制最大可放置资产数量,且资产出借和存放都有记录。由于线下仓库资产出借和购…

Card View 卡片视图

Goto 数据网格和视图入门 Card View 卡片视图 The Card View displays data records as cards, arranged down and then across. Card fields are always arranged in a single column. The Card View is represented by the CardView class. Card View &#xff08;卡片视图…

2024 SNERT 预备队招新 CTF 体验赛-Web

目录 1、robots 2、NOF12 3、get_post 4、好事慢磨 5、uploads 6、rce 7、ezsql 8、RCE 1、robots robots 协议又叫爬虫协议&#xff0c;访问 robots.txt 继续访问 /JAY.php 拿到 flag&#xff1a;flag{hello_Do_YOU_KONw_JAY!} 2、NOF12 F12 和右键都被禁用 方法&#…

[Linux]用户管理指令

开机/重启/登录/注销 进入xhsell 或者虚拟系统中, 右键桌面打开终端, 在终端执行命令, 重启或关机linux系统 建议使用普通账号登录, 如果权限不够时, 使用 su - 用户名 命令切换到超管, 然后再使用 logout命令退回到普通账号, logout 不能在图形界面的终端中使用 用户管理 Li…

Python画笔案例-058 绘制单击画酷炫彩盘

1、绘制单击画酷炫彩盘 通过 python 的turtle 库绘制 单击画酷炫彩盘,如下图: 2、实现代码 绘制单击画酷炫彩盘,以下为实现代码: """单击画酷炫彩盘.py"""from turtle import Turtle # 导入海龟类 from random import randint…

电子设计入门教程硬件篇之三极管BJT(四)

前言&#xff1a;本文为手把手教学的电子设计入门教程硬件类的博客&#xff0c;该博客侧重针对电子设计中的硬件电路进行介绍。本篇博客将根据电子设计实战中核心器件之一的三极管进行详细讲解&#xff0c;包含&#xff1a;PNP型与NPN型三极管。电子设计实践中的三极管是嵌入式…

心理教育辅导系统:Spring Boot技术实现

4 系统设计 4.1系统概要设计 高校心理教育辅导系统主要分为管理员、教师和学生三个角色&#xff0c;系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet&#xff0c;便可以在任…

xhs 小红书 x-s web 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我…

TryHackMe 第3天 | Pre Security (二)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识&#xff0c;本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…

19 基于51单片机的倒计时音乐播放系统设计

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 五个按键&#xff0c;分别为启动按键&#xff0c;则LCD1602显示倒计时&#xff0c;音乐播放 设置按键&#xff0c;可以设置倒计时的分秒&#xff0c;然后加减按键&#xff0c;还有最后一个暂停音乐…

基于 Web 的工业设备监测系统:非功能性需求与标准化数据访问机制的架构设计

目录 案例 【说明】 【问题 1】(6 分) 【问题 2】(14 分) 【问题 3】(5 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Web 系统架构设计的叙述&#xff0c;回答问题 1 至问题 3 。 【说明】 某公司拟开发一款基于 Web 的…

BERT的代码实现

目录 1.BERT的理论 2.代码实现 2.1构建输入数据格式 2.2定义BERT编码器的类 2.3BERT的两个任务 2.3.1任务一&#xff1a;Masked Language Modeling MLM掩蔽语言模型任务 2.3.2 任务二&#xff1a;next sentence prediction 3.整合代码 4.知识点个人理解 1.BERT的理论 B…

代码随想录算法训练营第58天|卡码网 117. 软件构建、47. 参加科学大会

1. 卡码网 117. 软件构建 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1191 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0117.软件构建.html 思路&#xff1a;使用BFS BFS的实现思路&#xff1a; 拓扑排序的过程&#xff0c;其实就两步…