圖片組件

2024-01-22 17:11 更新

Image為圖片組件,常用于在應(yīng)用中顯示圖片。Image支持加載string、PixelMapResource類型的數(shù)據(jù)源,支持png、jpg、bmp、svg和gif類型的圖片格式。

說(shuō)明

該組件從API Version 7開(kāi)始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。

需要權(quán)限

使用網(wǎng)絡(luò)圖片時(shí),需要申請(qǐng)權(quán)限ohos.permission.INTERNET。具體申請(qǐng)方式請(qǐng)參考權(quán)限申請(qǐng)聲明。

子組件

無(wú)

接口

Image(src: string | PixelMap | Resource)

通過(guò)圖片數(shù)據(jù)源獲取圖片,用于后續(xù)渲染展示。

Image組件加載圖片失敗或圖片尺寸為0時(shí),圖片組件大小自動(dòng)為0,不跟隨父組件的布局約束。

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

參數(shù):

參數(shù)名

參數(shù)類型

必填

參數(shù)描述

src

string | PixelMap | Resource

圖片的數(shù)據(jù)源,支持本地圖片和網(wǎng)絡(luò)圖片,引用方式請(qǐng)參考加載圖片資源。

  • string格式可用于加載網(wǎng)絡(luò)圖片和本地圖片,常用于加載網(wǎng)絡(luò)圖片。當(dāng)使用相對(duì)路徑引用本地圖片時(shí),例如Image("common/test.jpg"),不支持跨包/跨模塊調(diào)用該Image組件,建議使用Resource格式來(lái)管理需全局使用的圖片資源。
    • 支持Base64字符串。格式data:image/[png|jpeg|bmp|webp];base64,[base64 data], 其中[base64 data]為Base64字符串?dāng)?shù)據(jù)。
    • 支持file://路徑前綴的字符串。用于讀取本應(yīng)用安裝目錄下files文件夾下的圖片資源。需要保證目錄包路徑下的文件有可讀權(quán)限。
  • PixelMap格式為像素圖,常用于圖片編輯的場(chǎng)景。
  • Resource格式可以跨包/跨模塊訪問(wèn)資源文件,是訪問(wèn)本地圖片的推薦方式。

說(shuō)明:

  • ArkTS卡片支持gif圖片格式動(dòng)效,但僅在顯示時(shí)播放一次。
  • ArkTS卡片上不支持http://等網(wǎng)絡(luò)相關(guān)路徑前綴和file://路徑前綴的字符串。
  • ArkTS卡片上不支持PixelMap類型。

屬性

屬性的詳細(xì)使用指導(dǎo)請(qǐng)參考添加屬性。除支持通用屬性外,還支持以下屬性:

名稱

參數(shù)類型

描述

alt

string | Resource

加載時(shí)顯示的占位圖,支持本地圖片(png、jpg、bmp、svg和gif類型),不支持網(wǎng)絡(luò)圖片。

默認(rèn)值:null

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

objectFit

ImageFit

設(shè)置圖片的填充效果。

默認(rèn)值:ImageFit.Cover

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

objectRepeat

ImageRepeat

設(shè)置圖片的重復(fù)樣式。從中心點(diǎn)向兩邊重復(fù),剩余空間不足放下一張圖片時(shí)會(huì)截?cái)唷?/p>

默認(rèn)值:ImageRepeat.NoRepeat

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明:

svg類型圖源不支持該屬性。

interpolation

ImageInterpolation

設(shè)置圖片的插值效果,即減輕低清晰度圖片在放大顯示時(shí)出現(xiàn)的鋸齒問(wèn)題。

默認(rèn)值:ImageInterpolation.None

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明:

svg類型圖源不支持該屬性。

PixelMap資源不支持該屬性。

renderMode

ImageRenderMode

設(shè)置圖片的渲染模式為原色或黑白。

默認(rèn)值:ImageRenderMode.Original

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明:

svg類型圖源不支持該屬性。

sourceSize

{

width: number,

height: number

}

設(shè)置圖片解碼尺寸,降低圖片的分辨率,常用于需要讓圖片顯示尺寸比組件尺寸更小的場(chǎng)景。和ImageFit.None配合使用時(shí)可在組件內(nèi)顯示小圖。

單位:px

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明:

僅在目標(biāo)尺寸小于圖源尺寸時(shí)生效。

svg類型圖源不支持該屬性。

PixelMap資源不支持該屬性。

matchTextDirection

boolean

設(shè)置圖片是否跟隨系統(tǒng)語(yǔ)言方向,在RTL語(yǔ)言環(huán)境下顯示鏡像翻轉(zhuǎn)顯示效果。

默認(rèn)值:false

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

fitOriginalSize

boolean

圖片組件尺寸未設(shè)置時(shí),顯示尺寸是否跟隨圖源尺寸。

組件不設(shè)置寬高或僅設(shè)置寬/高時(shí),該屬性不生效。

默認(rèn)值:false

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

fillColor

ResourceColor

設(shè)置填充顏色,設(shè)置后填充顏色會(huì)覆蓋在圖片上。

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明:

僅對(duì)svg圖源生效,設(shè)置后會(huì)替換svg圖片的填充顏色。

autoResize

boolean

設(shè)置圖片解碼過(guò)程中是否對(duì)圖源自動(dòng)縮放。設(shè)置為true時(shí),組件會(huì)根據(jù)顯示區(qū)域的尺寸決定用于繪制的圖源尺寸,有利于減少內(nèi)存占用。如原圖大小為1920x1080,而顯示區(qū)域大小為200x200,則圖片會(huì)自動(dòng)解碼到200x200的尺寸,大幅度節(jié)省圖片占用的內(nèi)存。

默認(rèn)值:true

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

syncLoad8+

boolean

設(shè)置是否同步加載圖片,默認(rèn)是異步加載。同步加載時(shí)阻塞UI線程,不會(huì)顯示占位圖。

默認(rèn)值:false

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明:

建議加載尺寸較小的本地圖片時(shí)將syncLoad設(shè)為true,因?yàn)楹臅r(shí)較短,在主線程上執(zhí)行即可。

copyOption9+

CopyOptions

設(shè)置圖片是否可復(fù)制。

當(dāng)copyOption設(shè)置為非CopyOptions.None時(shí),支持使用長(zhǎng)按、鼠標(biāo)右擊、快捷組合鍵'CTRL+C'等方式進(jìn)行復(fù)制。

默認(rèn)值:CopyOptions.None

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明:

svg圖片不支持復(fù)制。

colorFilter9+

ColorFilter

給圖像設(shè)置顏色濾鏡效果,入?yún)橐粋€(gè)的4x5的RGBA轉(zhuǎn)換矩陣。

矩陣第一行表示R(紅色)的向量值,第二行表示G(綠色)的向量值,第三行表示B(藍(lán)色)的向量值,第四行表示A(透明度)的向量值,4行分別代表不同的RGBA的向量值。

RGBA值分別是0和1之間的浮點(diǎn)數(shù)字,當(dāng)矩陣對(duì)角線值為1時(shí),保持圖片原有色彩。

計(jì)算規(guī)則:

如果輸入的濾鏡矩陣為:

  1. [ r_1, r_2, r_3, r_4, r_5,
  2. g_1, g_2, g_3, g_4, g_5,
  3. b_1, b_2, b_3, b_4, b_5,
  4. a_1, a_2, a_3, a_4, a_5 ]

像素點(diǎn)為[R, G, B, A]

則過(guò)濾后的顏色為 [R’, G’, B’, A’]

  1. R’ = r_1*R + r_2*G + r_3*B + r_4*A + r_5
  2. G’ = g_1*R + g_2*G + g_3*B + g_4*A + g_5
  3. B’ = b_1*R + b_2*G + b_3*B + b_4*A + b_5
  4. A’ = a_1*R + a_2*G + a_3*B + a_4*A + a_5

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

draggable9+

boolean

設(shè)置組件默認(rèn)拖拽效果,設(shè)置為true時(shí),組件可拖拽。

不能和拖拽事件事件同時(shí)使用。

默認(rèn)值:false

說(shuō)明
  • 使用快捷組合鍵對(duì)Image組件復(fù)制時(shí),Image組件必須處于獲焦?fàn)顟B(tài)。Image組件默認(rèn)不獲焦,需將focusable屬性設(shè)置為true,即可使用TAB鍵將焦點(diǎn)切換到組件上,再將focusOnTouch屬性設(shè)置為true,即可實(shí)現(xiàn)點(diǎn)擊獲焦。
  • 圖片設(shè)置為svg圖源時(shí),當(dāng)前支持的標(biāo)簽是svg、rect、circle、ellipse、path、line、polyline和polygon。

ImageInterpolation

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

名稱

描述

None

不使用圖片插值。

High

高圖片插值,插值質(zhì)量最高,可能會(huì)影響圖片渲染的速度。

Medium

中圖片插值。

Low

低圖片插值。

ImageRenderMode

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

名稱

描述

Original

原色渲染模式。

Template

黑白渲染模式。

事件

除支持通用事件外,還支持以下事件:

onComplete

onComplete(callback: (event?: { width: number, height: number, componentWidth: number, componentHeight: number, loadingStatus: number }) => void)

圖片數(shù)據(jù)加載成功和解碼成功時(shí)均觸發(fā)該回調(diào),返回成功加載的圖片尺寸。

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

參數(shù):

參數(shù)名

類型

說(shuō)明

width

number

圖片的寬。

單位:像素

height

number

圖片的高。

單位:像素

componentWidth

number

組件的寬。

單位:像素

componentHeight

number

組件的高。

單位:像素

loadingStatus

number

圖片加載成功的狀態(tài)值。

說(shuō)明:

返回的狀態(tài)值為0時(shí),表示圖片數(shù)據(jù)加載成功。返回的狀態(tài)值為1時(shí),表示圖片解碼成功。

onError

onError(callback: (event?: { componentWidth: number, componentHeight: number , message: string }) => void)

圖片加載異常時(shí)觸發(fā)該回調(diào)。

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

參數(shù):

參數(shù)名

類型

說(shuō)明

componentWidth

number

組件的寬。

單位:像素

componentHeight

number

組件的高。

單位:像素

message9+

string

報(bào)錯(cuò)信息。

onFinish

onFinish(event: () => void)

當(dāng)加載的源文件為帶動(dòng)效的svg格式圖片時(shí),svg動(dòng)效播放完成時(shí)會(huì)觸發(fā)這個(gè)回調(diào)。如果動(dòng)效為無(wú)限循環(huán)動(dòng)效,則不會(huì)觸發(fā)這個(gè)回調(diào)。

僅支持svg格式的圖片。

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

示例

加載基本類型圖片

  1. @Entry
  2. @Component
  3. struct ImageExample1 {
  4. build() {
  5. Column() {
  6. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) {
  7. Row() {
  8. // 加載png格式圖片
  9. Image($r('app.media.ic_camera_master_ai_leaf'))
  10. .width(110).height(110).margin(15)
  11. .overlay('png', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
  12. // 加載gif格式圖片
  13. Image($r('app.media.loading'))
  14. .width(110).height(110).margin(15)
  15. .overlay('gif', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
  16. }
  17. Row() {
  18. // 加載svg格式圖片
  19. Image($r('app.media.ic_camera_master_ai_clouded'))
  20. .width(110).height(110).margin(15)
  21. .overlay('svg', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
  22. // 加載jpg格式圖片
  23. Image($r('app.media.ic_public_favor_filled'))
  24. .width(110).height(110).margin(15)
  25. .overlay('jpg', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
  26. }
  27. }
  28. }.height(320).width(360).padding({ right: 10, top: 10 })
  29. }
  30. }

加載網(wǎng)絡(luò)圖片

加載網(wǎng)絡(luò)圖片時(shí),默認(rèn)網(wǎng)絡(luò)超時(shí)是5分鐘,建議使用alt配置加載時(shí)的占位圖。如果需要更靈活的網(wǎng)絡(luò)配置,可以使用SDK中提供的HTTP工具包發(fā)送網(wǎng)絡(luò)請(qǐng)求,接著將返回的數(shù)據(jù)解碼為Image組件中的PixelMap,圖片開(kāi)發(fā)可參考圖片處理。

使用網(wǎng)絡(luò)圖片時(shí),需要申請(qǐng)權(quán)限ohos.permission.INTERNET。具體申請(qǐng)方式請(qǐng)參考權(quán)限申請(qǐng)聲明

  1. @Entry
  2. @Component
  3. struct ImageExample2 {
  4. build() {
  5. Column({ space: 10 }) {
  6. Image("https://www.example.com/xxx.png")// 直接加載網(wǎng)絡(luò)地址,請(qǐng)?zhí)顚懸粋€(gè)具體的網(wǎng)絡(luò)圖片地址
  7. .alt($r('app.media.icon'))// 使用alt,在網(wǎng)絡(luò)圖片加載成功前使用占位圖
  8. .width(100)
  9. .height(100)
  10. }
  11. }
  12. }

為圖片添加事件

  1. @Entry
  2. @Component
  3. struct ImageExample3 {
  4. @State widthValue: number = 0;
  5. @State heightValue: number = 0;
  6. private on: Resource = $r('app.media.image_on');
  7. private off: Resource = $r('app.media.image_off');
  8. private on2off: Resource = $r('app.media.image_on2off');
  9. private off2on: Resource = $r('app.media.image_off2on');
  10. @State src: Resource = this.on;
  11. build() {
  12. Column() {
  13. Row({ space: 20 }) {
  14. Column() {
  15. Image($r('app.media.img_example1'))
  16. .alt($r('app.media.ic_public_picture'))
  17. .sourceSize({
  18. width: 900,
  19. height: 900
  20. })
  21. .objectFit(ImageFit.Cover)
  22. .height(180).width(180)
  23. // 圖片加載完成后,獲取圖片尺寸。
  24. .onComplete((msg: { width: number,height: number }) => {
  25. this.widthValue = msg.width
  26. this.heightValue = msg.height
  27. })
  28. .onError(() => {
  29. console.log('load image fail')
  30. })
  31. .overlay('\nwidth: ' + String(this.widthValue) + ' height: ' + String(this.heightValue), {
  32. align: Alignment.Bottom,
  33. offset: { x: 0, y: 20 }
  34. })
  35. }
  36. // 為圖片添加點(diǎn)擊事件,點(diǎn)擊完成后加載特定圖片
  37. Image(this.src)
  38. .width(120).height(120)
  39. .onClick(() => {
  40. if (this.src == this.on || this.src == this.off2on) {
  41. this.src = this.on2off
  42. } else {
  43. this.src = this.off2on
  44. }
  45. })
  46. .onFinish(() => {
  47. if (this.src == this.off2on) {
  48. this.src = this.on
  49. } else {
  50. this.src = this.off
  51. }
  52. })
  53. }
  54. }.width('100%')
  55. }
  56. }

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)