首页 > 其他分享 >鸿蒙UI系统组件13——图片显示(Image)

鸿蒙UI系统组件13——图片显示(Image)

时间:2024-12-15 18:11:52浏览次数:9  
标签:13 media Image height width UI app 图片

1、概述

开发者经常需要在应用中显示一些图片,例如:按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif。

Image通过调用接口来创建,接口调用形式如下:

Image(src: string | Resource | media.PixelMap)

该接口通过图片数据源获取图片,支持本地图片和网络图片的渲染展示。其中,src是图片的数据源。

2、加载图片资源

Image支持加载存档图、多媒体像素图两种类型。

2.1、存档图类型数据源

存档图类型的数据源可以分为本地资源、网络资源、Resource资源、媒体库资源和base64,分别介绍如下:

  • 本地资源

    创建文件夹,将本地图片放入ets文件夹下的任意位置。

    Image组件引入本地图片路径,即可显示图片(根目录为ets文件夹)。

Image('images/view.jpg')
.width(200)
  • 网络资源

引入网络图片需申请权限ohos.permission.INTERNET。此时,Image组件的src参数为网络图片的链接。

Image('https://www.example.com/example.JPG') // 实际使用时请替换为真实地址
  • Resource资源

使用资源格式可以跨包/跨模块引入图片,resources文件夹下的图片都可以通过$r资源接口读取到并转换到Resource格式。例如有如下资源:

图片

调用方式:

Image($r('app.media.icon'))

另外,图片还可以放在rawfile文件夹下面,例如:

图片

调用方式:

Image($rawfile('snap'))
  • 媒体库file://data/storage

支持file://路径前缀的字符串,用于访问通过媒体库提供的图片路径。

  1. 调用接口获取图库的照片url。
import picker from '@ohos.file.picker';

@Entry
@Component
struct Index {
  @State imgDatas: string[] = [];
  // 获取照片url集
  getAllImg() {
    
    let result = new Array<string>();
    try {
      let PhotoSelectOptions = new picker.PhotoSelectOptions();
      PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
      PhotoSelectOptions.maxSelectNumber = 5;
      let photoPicker = new picker.PhotoViewPicker();
      photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => {
        this.imgDatas = PhotoSelectResult.photoUris;
        console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ' + JSON.stringify(PhotoSelectResult));
      }).catch((err) => {
        console.error(`PhotoViewPicker.select failed with. Code: ${err.code}, message: ${err.message}`);
      });
    } catch (err) {
      console.error(`PhotoViewPicker failed with. Code: ${err.code}, message: ${err.message}`);    }
  }

  // aboutToAppear中调用上述函数,获取图库的所有图片url,存在imgDatas中
  async aboutToAppear() {
    this.getAllImg();
  }
  // 使用imgDatas的url加载图片。
  build() {
    Column() {
      Grid() {
        ForEach(this.imgDatas, item => {
          GridItem() {
            Image(item)
              .width(200)
          }
        }, item => JSON.stringify(item))
      }
    }.width('100%').height('100%')
  }
}

b. 从媒体库获取的url格式通常如下:

Image('file://media/Photos/5')
.width(200)
  • base64

路径格式为data:image/[png|jpeg|bmp|webp];base64,[base64 data],其中[base64 data]为Base64字符串数据。

Base64格式字符串可用于存储图片的像素数据,在网页上使用较为广泛。

2.2、多媒体像素图

PixelMap是图片解码后的像素图。以下示例将加载的网络图片返回的数据解码成PixelMap格式,再显示在Image组件上,步骤如下:

step1: 创建PixelMap状态变量。

@State image: PixelMap = undefined;

step2: 引用多媒体。

请求网络图片请求,解码编码PixelMap。

  1. 引用网络权限与媒体库权限。
import http from '@ohos.net.http';
import ResponseCode from '@ohos.net.http';
import image from '@ohos.multimedia.image';

b. 填写网络图片地址,加载图片数据。

http.createHttp().request("https://www.example.com/xxx.png",
  (error, data) => {
    if (error){
      console.error(`http reqeust failed with. Code: ${error.code}, message: ${error.message}`);
    } else {
    }
  }
)

c. 将网络地址成功返回的数据,编码转码成pixelMap的图片格式。

let code = data.responseCode;
if (ResponseCode.ResponseCode.OK === code) {
  let res: any = data.result  
  let imageSource = image.createImageSource(res);
  let options = {
    alphaType: 0,                     // 透明度
    editable: false,                  // 是否可编辑
    pixelFormat: 3,                   // 像素格式
    scaleMode: 1,                     // 缩略值
    size: { height: 100, width: 100}
   }  // 创建图片大小
    imageSource.createPixelMap(options).then((pixelMap) => {
    this.image = pixelMap
  })
}

d. 显示图片

Button("获取网络图片")
  .onClick(() => {
    this.httpRequest()
  })
Image(this.image).height(100).width(100)

3、显示矢量图

Image组件可显示矢量图(svg格式的图片),支持的svg标签为:svg、rect、circle、ellipse、path、line、polyline、polygon和animate。

svg格式的图片可以使用fillColor属性改变图片的绘制颜色。

Image($r('app.media.cloud')).width(50)
.fillColor(Color.Blue)

原始图片
图片

设置绘制颜色后的svg图片
图片

3.1、添加属性

给Image组件设置属性可以使图片显示更灵活,达到一些自定义的效果。以下是几个常用属性的使用示例。

标签:13,media,Image,height,width,UI,app,图片
From: https://www.cnblogs.com/harmonyClassRoom/p/18608268

相关文章

  • 鸿蒙UI系统组件12——页面间跳转(router)
    1、概述实际的APP开发中,几乎都会遇到有多个页面跳转的情况,例如,登录->首页->个人中心。在鸿蒙开发中,页面间的跳转被称作为“页面路由”。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。本文将从页面跳转、页面返回和页面返回前增......
  • 鸿蒙UI系统组件15——画布(Canvas)
    概 述前一章我们学习了Shape绘制来绘制自定义形状(鸿蒙UI系统组件14——几何图形(Shape)),在实际的业务开发中,有可能我们需要绘制更复杂的图形,例如统计图中的饼图、折线图等,除了绘制图形外,可能还会绘制一些复杂的组件效果,此时,我们就需要用到画布(Canvas)组件来满足我们的需求了......
  • 2024-2025-1 20241314 《计算机基础与程序设计》第十二周学习总结
    2024-2025-120241314《计算机基础与程序设计》第十二周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第十二周作业这个作业的目标复习作业正文正文教材学习内容总结引......
  • 基于UI交互意图理解的异常检测方法2
     1.背景近年来,随着美团多种业务线的扩充和迭代,UI测试的任务愈发繁重。针对UI测试中人工成本过高的问题,美团到店测试团队开发了视觉自动化工具以进行UI界面的静态回归检查。然而,对于UI交互功能逻辑的检验仍强依赖于脚本测试,其无法满足对于进一步效率、覆盖面提升的强烈需求。......
  • 鸿蒙UI系统组件01——文本组件(Text/Span)
    如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!点击下面的名片关注公众号。1、概述Text是文本组件,是我们开发UI界面中最常见的组件之一,通常用于展示用户的视图,如显示文章的文字。下面将对文本组件展开介绍。2、创建文本Text可通过以下两种方式来创建:string字符串Text('......
  • 基于UI交互意图理解的异常检测方法12
      1.背景近年来,随着美团多种业务线的扩充和迭代,UI测试的任务愈发繁重。针对UI测试中人工成本过高的问题,美团到店测试团队开发了视觉自动化工具以进行UI界面的静态回归检查。然而,对于UI交互功能逻辑的检验仍强依赖于脚本测试,其无法满足对于进一步效率、覆盖面提升的强烈需求......
  • 基于UI交互意图理解的异常检测方法13
      1.背景近年来,随着美团多种业务线的扩充和迭代,UI测试的任务愈发繁重。针对UI测试中人工成本过高的问题,美团到店测试团队开发了视觉自动化工具以进行UI界面的静态回归检查。然而,对于UI交互功能逻辑的检验仍强依赖于脚本测试,其无法满足对于进一步效率、覆盖面提升的强烈需求......
  • 在使用 Terabyte Image for Windows (TBI) 恢复系统镜像时,相较于 Ghost(诺顿磁盘克隆工
    在使用TerabyteImageforWindows(TBI)恢复系统镜像时,相较于Ghost(诺顿磁盘克隆工具),恢复速度的差异主要受以下几个因素影响:压缩算法与镜像格式:TerabyteImage 使用了更加高效的压缩算法和镜像格式(例如 .tbi 格式),这可以减少数据量,从而提高恢复速度。相比之下,Ghost 在......
  • Problem: 1338. 数组大小减半 贪心 模拟 法 简单易懂
    Problem:1338.数组大小减半思路因为要选择最小的整数集合,这里用Counter容器来统计下所有各种数字的大小,然后按照值来排序,设置target来表示要到达什么位置,这里最好不要用整除,防止要计算的大于arr,但是len(arr)是奇数,这里total表示删除到这个位置已经删除了多少数字,如果大......
  • 2024-2025-1(20241321)《计算机基础与程序设计》第十二周学习总结
    这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机基础与程序设计第十二周作业)这个作业的目标<深刻学习C语言,反思一周学习,温故知新>作业正文...本博客链接https://www.cnblogs.com/guc......