HarmonyOS 如何获取网络图片的二进制文件(优先在内存中操作)

小程序插件,需要通过用户提供的url从网络上获取图片的二进制文件(不一定是二进制格式),放在内存变量里,再根据变量中的二进制数据生成图片存储到用户的相册里。(诉求:尽量将图片存放在内存中,而不要放在应用的缓存目录下。这样可以减少app不必要的文件占用。)

HarmonyOS
2024-08-23 00:08:03
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zbw_apple
import http from '@ohos.net.http'; 
import ResponseCode from '@ohos.net.http'; 
import image from '@ohos.multimedia.image'; 
import { BusinessError } from '@ohos.base'; 
import photoAccessHelper from '@ohos.file.photoAccessHelper' 
import fs from '@ohos.file.fs' 
@Entry 
@Component 
struct LoadImgFromUrl { 
  @State pixelMap: PixelMap | undefined = undefined; 
  loadImageWithUrl(url: string) { 
    let OutData: http.HttpResponse 
    let imagePackerApi = image.createImagePacker(); 
    let packOpts : image.PackingOption = { format:"image/jpeg", quality:98 }; 
    //确保网络正常 
    http.createHttp().request(url, 
      { 
        method:http.RequestMethod.GET, 
        connectTimeout:60000, 
        readTimeout:60000 
      }, 
      async (error: BusinessError, data: http.HttpResponse) => { 
        if (error) { 
          console.error(`http reqeust failed with. Code: ${error.code}, message: ${error.message}`); 
        } else { 
          OutData = data 
          let code: http.ResponseCode | number = OutData.responseCode 
          if (ResponseCode.ResponseCode.OK === code) { 
            let imageData: ArrayBuffer = OutData.result as ArrayBuffer; 
            let imageSource: image.ImageSource = image.createImageSource(imageData); 
            class tmp { 
              height: number = 100 
              width: number = 100 
            } 
            let si: tmp = new tmp() 
            let options: Record<string, number | boolean | tmp> = { 
              'alphaType': 0, // 透明度 
              'editable': false, // 是否可编辑 
              'pixelFormat': 3, // 像素格式 
              'scaleMode': 1, // 缩略值 
              'size': { height: 100, width: 100 } 
            } // 创建图片大小 
            imageSource.createPixelMap(options).then((pixelMap: PixelMap) => { 
              this.pixelMap = pixelMap 
              this.pixelMap.getImageInfo().then((info: image.ImageInfo) => { 
                console.info('info.width = ' + info.size.width) 
              }).catch((err: BusinessError) =>{ 
                console.error("Faild " + err);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
分享
微博
QQ
微信
回复
2024-08-23 16:12:30


相关问题
如何直接加载二进制图片
3719浏览 • 1回复 待解决
HarmonyOS 二进制转16进制
711浏览 • 1回复 待解决
如何二进制进行AES解密?
1048浏览 • 1回复 待解决
native层如何访问rawfile二进制文件
2677浏览 • 1回复 待解决
HarmonyOS 图片二进制流jpeg格式转换
686浏览 • 1回复 待解决
HarmonyOS进制二进制方法
878浏览 • 1回复 待解决
jsbind--二进制包导入指导
1512浏览 • 1回复 待解决
HarmonyOS gzip二进制流压缩和解压缩
1775浏览 • 1回复 待解决
base目录内容会被编译成二进制
746浏览 • 1回复 待解决
如何获取网络图片尺寸?
1176浏览 • 1回复 待解决
HarmonyOS 获取网络图片高度
620浏览 • 1回复 待解决