程序员Feri 2025-10-21 17:40:11 发布Hello!我是程序员Feri—— 13 年编程老炮,实战派技术人,拆解编程技巧、分享副业心得,记录程序员的进阶路,AI 时代一起稳稳向前。
在应用开发的世界里,图片就像界面的“表情包”——少了它,再好用的功能也显得干巴巴。今天咱们就来聊聊HarmonyOS里的“图片搬运工”——Image组件,看看它怎么把各种图片“请”到界面上,还能让图片摆出不同姿势~
一、Image组件:你的专属“图片展示架”
Image组件的作用很简单:给图片一个“舞台”,让它在界面上露脸。它支持的图片格式还挺全乎——png、jpg、jpeg、bmp、svg、webp、gif、heif都能搞定,但apng和svga这俩“调皮鬼”暂时不接待哦~
用法也不复杂,基本款长这样:
Image(图片的“老家地址”).属性名(属性值) // 给图片打扮打扮甚至还能给图片加“点击特效”,比如点一下换张图,像翻相册一样好玩~
二、图片的“老家”在哪?4种寻图秘籍
想让图片上台,得先知道它藏在哪。Image组件有4种“寻图大法”,帮你把图片从不同地方揪出来:
1. 自家相册里的珍藏(项目media文件夹)
项目里自己放的图片,就像存在手机相册里的照片,路径格式是:$r("app.media.图片名")
比如你在media里放了张叫“startIcon”的图,直接这么写:
Image($r("app.media.startIcon")) // 从自家相册拿图.width(100) // 宽100px.height(100) // 高100px2. 系统自带的免费素材(系统media库)
系统里藏了些现成的图片,比如图标啥的,不用自己找,直接用:$r("sys.media.图片名")
比如想拿系统的“AI_phone”图标:
Image($r("sys.media.AI_phone")) // 薅系统的免费素材.width(100).height(100)3. 深藏不露的资源库(rawfile文件夹)
有些图片喜欢“躲”在rawfile文件夹里,得带上后缀名喊它出来:$rawfile("图片名.后缀")
比如rawfile里有张“img1.png”:
Image($rawfile("img1.png")) // 从密室里揪出图片.width(100).height(100)4. 来自远方的网友分享(网络图片)
网上的图片想“请”过来,得给它开个“通行证”——申请网络权限。不然它会被挡在门外哦~
申请通行证步骤:
在module.json5里加一段“求情信”:
"requestPermissions": [ { "name": "ohos.permission.INTERNET" // 给个上网许可呗~ }]然后直接写图片的网络地址就行,比如:
Image("https://wx4.sinaimg.cn/mw690/e7db43bbly1ht8lnnq0qij20np0zkwko.jpg").width(200).height(200)三、图片的“穿搭指南”:objectFit属性
图片和展示框大小不匹配时,就像衣服不合身——要么撑破,要么露半截。这时候objectFit属性就能帮图片“选对衣服”,看看哪款适合它:
| 穿搭风格 | 效果说明 |
|---|---|
| Fill(紧身衣) | 不管比例硬塞,哪怕变形也要填满框(适合不在乎颜值,只在乎占满的场景) |
| Contain(宽松衣) | 乖乖待在框里,保持比例,再大也不超界(适合想完整看全图的情况) |
| Cover(霸气装) | 占满框,保持比例,但多余部分会被剪掉(适合想突出重点,不怕裁边的场景) |
| Auto(智能衣) | 自动缩放,尽量又满又完整(懒人首选,让系统帮你决定) |
| None(原尺寸) | 不管框多大,我就保持原样(适合图片本身尺寸刚好的情况) |
| ScaleDown(缩水衣) | 只缩小不放大,保持比例(适合图片太大,想缩小点但不变形的场景) |
举个例子,给图片穿“紧身衣”和“宽松衣”的区别:
// 穿紧身衣:强行塞满,可能变形Image($r("app.media.startIcon")).width(120).height(150).objectFit(ImageFit.Fill).border({width:1, color: Color.Yellow}) // 加个黄边框看得清楚// 穿宽松衣:完整待在框里,不超界Image($r("app.media.startIcon")).width(120).height(150).objectFit(ImageFit.Contain).border({width:1, color: Color.Yellow})四、互动小彩蛋:点一点换图片
给图片加个点击事件,就能实现“点一下换一张”的效果,像玩翻牌游戏一样~
步骤很简单:
- 准备一个图片数组,比如放3张图;
- 用onClick事件,每次点击随机选一个数组索引;
- 图片就会跟着索引切换啦~
代码示例:
@Entry@Componentstruct Demo3 { // 图片数组:就像一沓照片 imgs: Resource[] = [ $r("app.media.st"), $r("app.media.jd"), $r("app.media.bu") ] // 当前显示的照片索引(默认第一张) @State index: number = 0; build() { Column({ space: 20 }) { // 会变的图片 Image(this.imgs[this.index]) .onClick(() => { // 点击时随机换一张(Math.random()生成0-1的随机数) this.index = Math.floor(Math.random() * this.imgs.length); }) .objectFit(ImageFit.Contain) // 保持完整 .width(300) .height(300) // 显示当前是第几张 Text("当前是第" + this.index + "张图") } .width('100%') .height('100%') }}

总结
Image组件就像一个万能的“图片展示框”——能从本地、系统、网络各种地方找图,还能给图片换“穿搭”,甚至加互动效果。下次开发时,记得用它给你的界面添点“颜值”哦~
暂无评论数据
发布
相关推荐
周正
75
0
周正
199
0
周正
43
0
周正
97
0
周正
63
0
程序员Feri
13 年编程老炮,华为开发者专家,北科大硕士,实战派技术人(开发/架构/教学/创业),拆解编程技巧、分享副业心得,记录程序员的进阶路,AI 时代一起稳稳向前。
帖子
提问
粉丝
【万字硬核】HarmonyOS 6.0 游戏开发终极指南:从渲染架构到 FFRT 并行优化全解析
2026-01-22 18:00:22 发布【万字硬核】深入剖析 HarmonyOS 6.0 的 V2 状态管理:从原理到实战的完整实操
2026-01-22 17:59:30 发布