1e41f4b71Sopenharmony_ci# \<image> Development
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ciThe **\<image>** component is used to render and display images. For details, see [image](../reference/apis-arkui/arkui-js/js-components-basic-image.md).
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci## Creating an \<image> Component
7e41f4b71Sopenharmony_ci
8e41f4b71Sopenharmony_ciCreate an **\<image>** component in the .hml file under **pages/index**.
9e41f4b71Sopenharmony_ci```html
10e41f4b71Sopenharmony_ci<!-- index.hml -->
11e41f4b71Sopenharmony_ci<div class="container">
12e41f4b71Sopenharmony_ci  <image style="height: 30%;" src="common/images/bg-tv.jpg"> </image>
13e41f4b71Sopenharmony_ci</div>
14e41f4b71Sopenharmony_ci```
15e41f4b71Sopenharmony_ci
16e41f4b71Sopenharmony_ci```css
17e41f4b71Sopenharmony_ci/* xxx.css */
18e41f4b71Sopenharmony_ci.container {
19e41f4b71Sopenharmony_ci  width: 100%;
20e41f4b71Sopenharmony_ci  height: 100%; 
21e41f4b71Sopenharmony_ci  flex-direction: column;
22e41f4b71Sopenharmony_ci  justify-content: center;
23e41f4b71Sopenharmony_ci  align-items: center;
24e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
25e41f4b71Sopenharmony_ci}
26e41f4b71Sopenharmony_ci```
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci![en-us_image_0000001223127736](figures/en-us_image_0000001223127736.png)
29e41f4b71Sopenharmony_ci
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci## Setting the Image Style
32e41f4b71Sopenharmony_ci
33e41f4b71Sopenharmony_ciSet the **width**, **height**, and **object-fit** attributes to define the width, height, and scale type of the image.
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci
36e41f4b71Sopenharmony_ci```html
37e41f4b71Sopenharmony_ci<!-- index.hml -->
38e41f4b71Sopenharmony_ci<div class="container">
39e41f4b71Sopenharmony_ci  <image src="common/images/bg-tv.jpg"> </image>
40e41f4b71Sopenharmony_ci</div>
41e41f4b71Sopenharmony_ci```
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci
44e41f4b71Sopenharmony_ci```css
45e41f4b71Sopenharmony_ci/* xxx.css */
46e41f4b71Sopenharmony_ci.container {
47e41f4b71Sopenharmony_ci  width: 100%;
48e41f4b71Sopenharmony_ci  height: 100%;
49e41f4b71Sopenharmony_ci  flex-direction: column;
50e41f4b71Sopenharmony_ci  align-items: center;
51e41f4b71Sopenharmony_ci  justify-content: center;
52e41f4b71Sopenharmony_ci  background-color:#F1F3F5;
53e41f4b71Sopenharmony_ci}
54e41f4b71Sopenharmony_ciimage{
55e41f4b71Sopenharmony_ci  width: 80%;  
56e41f4b71Sopenharmony_ci  height: 500px;
57e41f4b71Sopenharmony_ci  border: 5px solid saddlebrown;
58e41f4b71Sopenharmony_ci  border-radius: 20px;
59e41f4b71Sopenharmony_ci  object-fit: contain;
60e41f4b71Sopenharmony_ci  match-text-direction:true;
61e41f4b71Sopenharmony_ci}
62e41f4b71Sopenharmony_ci```
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci
65e41f4b71Sopenharmony_ci![en-us_image_0000001222807796](figures/en-us_image_0000001222807796.png)
66e41f4b71Sopenharmony_ci
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ci## Loading the Image
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_ciWhen the image is successfully loaded, the **complete** event is triggered, and the loaded image is returned. If an exception occurs during image loading, the **error** event is triggered, and the image loading failure log is printed.
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci```html
73e41f4b71Sopenharmony_ci<!-- index.hml -->
74e41f4b71Sopenharmony_ci<div class="container" >
75e41f4b71Sopenharmony_ci  <div>
76e41f4b71Sopenharmony_ci    <image src="common/images/bg-tv.jpg" oncomplete="imageComplete(1)" onerror="imageError(1)"> </image>
77e41f4b71Sopenharmony_ci  </div>
78e41f4b71Sopenharmony_ci  <div>
79e41f4b71Sopenharmony_ci    <image src="common/images/bg-tv1.jpg" oncomplete="imageComplete(2)" onerror="imageError(2)"> </image>
80e41f4b71Sopenharmony_ci  </div>
81e41f4b71Sopenharmony_ci</div>
82e41f4b71Sopenharmony_ci```
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci```css
85e41f4b71Sopenharmony_ci/* xxx.css */
86e41f4b71Sopenharmony_ci.container{
87e41f4b71Sopenharmony_ci  width: 100%;
88e41f4b71Sopenharmony_ci  height: 100%;
89e41f4b71Sopenharmony_ci  flex-direction: column;
90e41f4b71Sopenharmony_ci  justify-content: center;
91e41f4b71Sopenharmony_ci  align-self: center;
92e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
93e41f4b71Sopenharmony_ci}
94e41f4b71Sopenharmony_ci.container div{
95e41f4b71Sopenharmony_ci  margin-left: 10%;
96e41f4b71Sopenharmony_ci  width: 80%;
97e41f4b71Sopenharmony_ci  height: 300px;
98e41f4b71Sopenharmony_ci  margin-bottom: 40px;
99e41f4b71Sopenharmony_ci}
100e41f4b71Sopenharmony_ci```
101e41f4b71Sopenharmony_ci
102e41f4b71Sopenharmony_ci```js
103e41f4b71Sopenharmony_ci// index.js
104e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
105e41f4b71Sopenharmony_ciexport default {
106e41f4b71Sopenharmony_ci  imageComplete(i,e){
107e41f4b71Sopenharmony_ci    promptAction.showToast({
108e41f4b71Sopenharmony_ci      message: "image "+i+"'s width"+ e.width+"----image "+i+"'s height"+e.height,
109e41f4b71Sopenharmony_ci      duration: 3000,
110e41f4b71Sopenharmony_ci    })
111e41f4b71Sopenharmony_ci  },
112e41f4b71Sopenharmony_ci  imageError(i,e){
113e41f4b71Sopenharmony_ci    setTimeout(()=>{
114e41f4b71Sopenharmony_ci      promptAction.showToast({
115e41f4b71Sopenharmony_ci        message: "Failed to load image "+i+".",
116e41f4b71Sopenharmony_ci        duration: 3000,
117e41f4b71Sopenharmony_ci      })
118e41f4b71Sopenharmony_ci    },3000)
119e41f4b71Sopenharmony_ci  }
120e41f4b71Sopenharmony_ci}
121e41f4b71Sopenharmony_ci```
122e41f4b71Sopenharmony_ci
123e41f4b71Sopenharmony_ci![en-us_image_images](figures/en-us_image_images.gif)
124e41f4b71Sopenharmony_ci
125e41f4b71Sopenharmony_ci
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ci## Example Scenario
128e41f4b71Sopenharmony_ci
129e41f4b71Sopenharmony_ciIn this example you touch and hold an image to gradually hide it. After the image is completely hidden, it will show in its original setting. Set a **setInterval** timer to change the image opacity at a specified interval so that it is hidden gradually. When the opacity changes to **0**, the timer is cleared and the opacity is set to **1**.
130e41f4b71Sopenharmony_ci```html
131e41f4b71Sopenharmony_ci<!-- index.hml -->
132e41f4b71Sopenharmony_ci<div class="page-container">
133e41f4b71Sopenharmony_ci  <div class="content">
134e41f4b71Sopenharmony_ci    <div class="image-container">
135e41f4b71Sopenharmony_ci      <image class="testimage" src="{{testuri}}" style="opacity:{{imageopacity}};" onlongpress="changeopacity"> </image>
136e41f4b71Sopenharmony_ci    </div>
137e41f4b71Sopenharmony_ci    <div class="text-container">
138e41f4b71Sopenharmony_ci      <text style="font-size: 37px;font-weight:bold;color:orange;text-align: center;width: 100%;">Touch and hold the image</text>
139e41f4b71Sopenharmony_ci    </div>
140e41f4b71Sopenharmony_ci  </div>
141e41f4b71Sopenharmony_ci</div>
142e41f4b71Sopenharmony_ci```
143e41f4b71Sopenharmony_ci
144e41f4b71Sopenharmony_ci```css
145e41f4b71Sopenharmony_ci/* xxx.css */
146e41f4b71Sopenharmony_ci.page-container {
147e41f4b71Sopenharmony_ci  width: 100%;
148e41f4b71Sopenharmony_ci  height: 100%;
149e41f4b71Sopenharmony_ci  flex-direction:column;
150e41f4b71Sopenharmony_ci  align-self: center;
151e41f4b71Sopenharmony_ci  justify-content: center;
152e41f4b71Sopenharmony_ci  background-color:#F1F3F5;
153e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
154e41f4b71Sopenharmony_ci}
155e41f4b71Sopenharmony_ci.content{
156e41f4b71Sopenharmony_ci  flex-direction:column;
157e41f4b71Sopenharmony_ci}
158e41f4b71Sopenharmony_ci.image-container {
159e41f4b71Sopenharmony_ci  width: 100%;
160e41f4b71Sopenharmony_ci  height: 300px;
161e41f4b71Sopenharmony_ci  align-items: center;
162e41f4b71Sopenharmony_ci  justify-content: center;
163e41f4b71Sopenharmony_ci}
164e41f4b71Sopenharmony_ci.text-container {
165e41f4b71Sopenharmony_ci  margin-top:50px;
166e41f4b71Sopenharmony_ci  width: 100%;
167e41f4b71Sopenharmony_ci  height: 60px;
168e41f4b71Sopenharmony_ci  flex-direction: row;
169e41f4b71Sopenharmony_ci  justify-content: space-between;
170e41f4b71Sopenharmony_ci}
171e41f4b71Sopenharmony_ci.testimage {
172e41f4b71Sopenharmony_ci  width: 100%;  height: 400px;   
173e41f4b71Sopenharmony_ci  object-fit: scale-down;  
174e41f4b71Sopenharmony_ci  border-radius: 20px;
175e41f4b71Sopenharmony_ci}
176e41f4b71Sopenharmony_ci```
177e41f4b71Sopenharmony_ci
178e41f4b71Sopenharmony_ci```js
179e41f4b71Sopenharmony_ci// index.js
180e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
181e41f4b71Sopenharmony_ciexport default {
182e41f4b71Sopenharmony_ci  data: {
183e41f4b71Sopenharmony_ci    testuri: 'common/images/bg-tv.jpg',
184e41f4b71Sopenharmony_ci    imageopacity:1,
185e41f4b71Sopenharmony_ci    timer: null
186e41f4b71Sopenharmony_ci  },
187e41f4b71Sopenharmony_ci  changeopacity: function () {
188e41f4b71Sopenharmony_ci    promptAction.showToast({
189e41f4b71Sopenharmony_ci      message: 'Touch and hold the image.'
190e41f4b71Sopenharmony_ci    })
191e41f4b71Sopenharmony_ci    var opval = this.imageopacity * 20
192e41f4b71Sopenharmony_ci    clearInterval(this.timer);
193e41f4b71Sopenharmony_ci    this.timer = setInterval(()=>{
194e41f4b71Sopenharmony_ci      opval--;
195e41f4b71Sopenharmony_ci      this.imageopacity = opval / 20
196e41f4b71Sopenharmony_ci      if (opval===0) {
197e41f4b71Sopenharmony_ci        clearInterval(this.timer)
198e41f4b71Sopenharmony_ci        this.imageopacity = 1
199e41f4b71Sopenharmony_ci      }
200e41f4b71Sopenharmony_ci    },100);
201e41f4b71Sopenharmony_ci  }
202e41f4b71Sopenharmony_ci}
203e41f4b71Sopenharmony_ci```
204e41f4b71Sopenharmony_ci
205e41f4b71Sopenharmony_ci![en-us_image_0000001267607905](figures/en-us_image_0000001267607905.gif)
206