HarmonyOS 鸿蒙Next 自定义组件,用于加载网络图片并转换为 base64

发布于 1周前 作者 eggper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 自定义组件,用于加载网络图片并转换为 base64

自定义组件,用于加载网络图片并转换为 base64。

遇到的问题: 公司的项目API接口设置了 User-Agent ,导致鸿蒙组件Image无法直接调用图片地址。思路:请求API后转换成base64,封装成组件。

代码实现

import http from '@ohos.net.http';
import image from '@ohos.multimedia.image';
import util from '@ohos.util';
import { LogUtil, StrUtil, ToastUtil } from '@pura/harmony-utils';
// 自定义组件,用于加载网络图片并转换为 base64
@Component
export  struct NetworkImageLoader {
 @Prop imageUrl: string; // 网络图片的 URL
 @Prop Border: BorderOptions = {}
 @State base64String: string = '';

 aboutToAppear(): void {
 this.loadImage();
 }

 loadImage() {
   let httpRequest = http.createHttp();
   httpRequest.request(this.imageUrl,
     {
       header:{ 'User-Agent':'123' }
     },
     (error, data) => {
     if (error) {
       httpRequest.destroy();
       console.error(`http request failed with. Code: ${error.code}, message: ${error.message}`);
     } else {
       let code = data.responseCode;
       if (code === http.ResponseCode.OK) {
         let imageData = data.result as ArrayBuffer;
         this.convertImageDataToBase64(imageData);
       } else {
         httpRequest.destroy();
         console.error(`HTTP request failed with status code: ${code}`);
       }
     }
   });
 }

 convertImageDataToBase64(imageData: ArrayBuffer) {
   let base64 = new util.Base64Helper();
   let data = base64.encodeToStringSync(new Uint8Array(imageData));
   this.base64String = `data:image/jpeg;base64,${data}`;

  console.log(this.base64String);

 }

 build() {
   // 使用 Image 组件显示 base64 编码的图片
   Image(this.base64String)
     //.borderRadius(this.Radius)
     .border(this.Border)
 }
}



更多关于HarmonyOS 鸿蒙Next 自定义组件,用于加载网络图片并转换为 base64的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
大神啊,感谢分享

更多关于HarmonyOS 鸿蒙Next 自定义组件,用于加载网络图片并转换为 base64的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢博主分享,对我用处很大

在HarmonyOS 鸿蒙Next中,自定义组件加载网络图片并转换为Base64可以通过以下步骤实现:

  1. 使用网络请求库:利用HarmonyOS提供的网络请求API(如ohos.multimedia.ImageFetcher或第三方库)获取网络图片。

  2. 读取图片数据:将获取到的图片数据读取为字节数组。

  3. Base64编码:使用HarmonyOS内置的Base64编码工具(如ohos.utils.Base64)将字节数组编码为Base64字符串。

示例代码(伪代码形式):

// 假设使用ImageFetcher获取图片
ImageFetcher fetcher = new ImageFetcher();
fetcher.fetchImage(imageUrl, new CommonCallback<ImageProvider>() {
    @Override
    public void onSuccess(ImageProvider result) {
        // 获取图片像素数据并转换为字节数组
        byte[] imageData = getImageBytes(result);
        
        // 使用Base64编码
        String base64String = ohos.utils.Base64.encodeToString(imageData, ohos.utils.Base64.DEFAULT);
        
        // 处理Base64字符串
    }

    @Override
    public void onError(int code, String msg) {
        // 处理错误
    }
});

// 自定义方法getImageBytes需实现图片数据到字节数组的转换

请注意,上述代码为简化示例,具体实现需根据HarmonyOS API文档进行完善。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部