HarmonyOS 媒体问题相关咨询

​1.如何保存网络url图片和base64图片到本地相册。

2.手机录制的视频,如何获取视频封面(或者取视频第一帧作为封面)。​

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

网络图片需要下载后在保存到相册。

loadImageWithUrl(url: string) { 
  // 使用request下载图片并在回调函数中保存图片到相册 
  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 { 
      if (ResponseCode.ResponseCode.OK === data.responseCode) { 
        let imageBuffer: ArrayBuffer = data.result as ArrayBuffer; 
        try { 
          // 获取相册路径 
          const context = getContext(this); 
          let helper = photoAccessHelper.getPhotoAccessHelper(context); 
          let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg') 
          let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE) 
          // 写入文件 
          fs.writeSync(file.fd, imageBuffer); 
          // 关闭文件 
          fs.closeSync(file.fd); 
        } catch (error) { 
          console.error("error is "+ JSON.stringify(error)) 
        } 
      } else { 
        console.error("error occurred when image downloaded!") 
      } 
    } 
  }) 
}

先把base64转成文件流,然后使用@ohos.file.fs的fs.write方法先把图片写到自己的项目目录里面,然后在使用@ohos.file.picker读取目录里面的图片,保存到用户手机上。

saveBase64Image(base64Str:string) { 
  //文件保存路径 
  let uri = ''; 
  try { 
    let PhotoSaveOptions = new picker.PhotoSaveOptions(); 
    //保存图片默认名称 
    PhotoSaveOptions.newFileNames = ['test.png']; 
    let photoPicker = new picker.PhotoViewPicker(); 
    //调起系统的图片保存功能 
    photoPicker.save(PhotoSaveOptions).then((PhotoSaveResult) => { 
      uri = PhotoSaveResult[0]; 
      //获取图片的base64字符串 
      let imageStr = base64Str.split(',')[1]; 
      //打开文件 
      let file = fs.openSync(uri, fs.OpenMode.READ_WRITE); 
      //base64字符串转成buffer 
      const decodeBuffer = buffer.from(imageStr, 'base64').buffer; 
      //写入文件 
      fs.writeSync(file.fd, decodeBuffer); 
      //关闭文件 
      fs.closeSync(file); 
    }).catch((err: Error) => { 
      console.error(err + ''); 
    }) } catch (e) { 
    console.error(e); 
  } 
}

应该是要把缩略图放在本应用沙箱路径下。您可以把pixelMap写到本应用的沙箱路径,把uri传给H5。

async savePixlMap(pixelMap:image.PixelMap): Promise<string>{ 
 
  let context = getContext(this) as common.UIAbilityContext; 
  let filesDir = context.filesDir; 
  let filePath = filesDir + `/${new Date().getTime()}.jpg` 
  fs.createRandomAccessFileSync(filePath, fs.OpenMode.CREATE); 
  let resUri = fileuri.getUriFromPath(filePath); 
  try { 
  const imagePackerApi: image.ImagePacker = image.createImagePacker(); 
  const packOpts: image.PackingOption = { format: "image/jpeg", quality: 100 }; 
  let imageBuffer: ArrayBuffer = new ArrayBuffer(1); 
  // 图片压缩或重新打包 
  imageBuffer = await imagePackerApi.packing(pixelMap, packOpts); 
  let file = fs.openSync(resUri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
  fs.writeSync(file.fd, imageBuffer); 
  //关闭文件 
  fs.closeSync(file); 
 
} catch (err) { 
  console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`); 
} 
return resUri 
}
分享
微博
QQ
微信
回复
3天前
相关问题
HarmonyOS 媒体硬解相关问题咨询
424浏览 • 1回复 待解决
HarmonyOS AOT相关问题咨询
282浏览 • 1回复 待解决
HarmonyOS 音频播放相关问题咨询
76浏览 • 1回复 待解决
jsBridge相关问题咨询
305浏览 • 1回复 待解决
咨询下WebSocket相关问题
336浏览 • 1回复 待解决
HarmonyOS TextInput和键盘相关问题咨询
408浏览 • 1回复 待解决
HarmonyOS InputText相关咨询
215浏览 • 1回复 待解决
HarmonyOS 计步传感器相关问题咨询
51浏览 • 1回复 待解决
重力传感器相关问题咨询
242浏览 • 1回复 待解决
设备唯一id相关问题咨询
1644浏览 • 1回复 待解决
AltBeacon在HarmonyOS下的相关实现咨询
253浏览 • 1回复 待解决
HarmonyOS卡片问题咨询
213浏览 • 1回复 待解决
HarmonyOS 画布问题咨询
139浏览 • 1回复 待解决
HarmonyOS 录像问题咨询
329浏览 • 1回复 待解决
HarmonyOS 系统picker问题咨询
307浏览 • 1回复 待解决
HarmonyOS 崩溃收集问题咨询
353浏览 • 1回复 待解决
HarmonyOS getRawFileContent使用问题咨询
469浏览 • 1回复 待解决
HarmonyOS image resizable问题咨询
279浏览 • 1回复 待解决
HarmonyOS RN相关问题
345浏览 • 1回复 待解决
HarmonyOS protobuf相关问题
312浏览 • 1回复 待解决
HarmonyOS 地图相关问题
471浏览 • 1回复 待解决
HarmonyOS CardRecognition相关问题
29浏览 • 1回复 待解决
HarmonyOS音频相关问题
385浏览 • 1回复 待解决
HarmonyOS 证书相关问题
278浏览 • 1回复 待解决