HarmonyOS 鸿蒙Next 自定义组件,用于加载网络图片并转换为 base64
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
更多关于HarmonyOS 鸿蒙Next 自定义组件,用于加载网络图片并转换为 base64的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS 鸿蒙Next中,自定义组件加载网络图片并转换为Base64可以通过以下步骤实现:
-
使用网络请求库:利用HarmonyOS提供的网络请求API(如
ohos.multimedia.ImageFetcher
或第三方库)获取网络图片。 -
读取图片数据:将获取到的图片数据读取为字节数组。
-
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