HarmonyOS 相册里面的视频、GIF、图片如何获取缩略图地址而不是pixelMap ?

Flutter端调用HarmonyOS端原始相册,比如im聊天页面,需要在显示时显示缩略图,并且记录到数据库中缩略图的地址和原图地址,现在HarmonyOS的api返回的缩略图是pixelMap,这个到Flutter端不能满足需求。

HarmonyOS
2024-11-19 11:10:05
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fox280

​当前只支持pixelMap缩略图。

pixelMap的处理可参考:​https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/image-overview-V5

可以在HarmonyOS里面将拿到的pixelMap存到沙箱路径,获取沙箱路径的path。​

async packingPixelMap2Jpg(pixelMap: image.PixelMap): Promise<ArrayBuffer> { 
  // pixel 转 jpg 
  // 创建ImagePacker实例 
  const imagePackerApi = image.createImagePacker(); 
  // 设置打包参数 
  // format:图片打包格式,只支持 jpg 和 webp 
  // quality:JPEG 编码输出图片质量 
  // bufferSize:图片大小,默认 10M 
  const packOpts: image.PackingOption = { format: "image/png", quality: 98 }; 
  let imageBuffer: ArrayBuffer = new ArrayBuffer(10); 
  try { 
  // 图片压缩或重新打包 
  imageBuffer = await imagePackerApi.packing(pixelMap, packOpts); 
} catch (err) { 
  console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`); 
} 
return imageBuffer; 
} 
 
async savePixmap(pixelMap: image.PixelMap, savePath: string) { 
  // 保存位图 
  const imageBuffer = await this.packingPixelMap2Jpg(pixelMap); 
  try { 
    const file = fs.openSync(savePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
    fs.writeSync(file.fd, imageBuffer); 
    fs.closeSync(file); 
  } 
  catch (err) { 
    console.error(`Invoke copyFile failed, err: ${JSON.stringify(err)}`); 
  } 
}

参数savePath是保存的沙箱路径地址。

savePath=getContext(this).filesDir + "/test.png"
分享
微博
QQ
微信
回复
2024-11-19 14:56:30
相关问题
缩略图如何获取文件的缩略图
732浏览 • 1回复 待解决
HarmonyOS 根据视频路径生成缩略图
51浏览 • 1回复 待解决
鸿蒙能获取图片指定大小的缩略图
9608浏览 • 1回复 待解决
HarmonyOS读取视频缩略图问题求助
630浏览 • 1回复 待解决
HarmonyOS如何实现gif图片控制
396浏览 • 1回复 待解决
HarmonyOS获取相册视频的宽高问题
470浏览 • 1回复 待解决
如何获取拍照后的图片地址
1974浏览 • 1回复 待解决
HarmonyOS如何PixelMap保存到相册
576浏览 • 1回复 待解决