HarmonyOS 组件截图然后保存到相册中后无法显示,尺寸为0

组件截图然后保存到相册中后无法显示,尺寸为0,通过componentSnapshot工具对指定id的组件截图后保存到相册,保存成功后图片是空白的。

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

​1、componentSnapshot.get 获取图片结果为 image.PixelMap 为像素分布,需要使用 imagePackerApi.packing 转换为 jpg\png 等格式。

文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5?catalogVersion=V5

2、Demo:componentSnapshot.get 保存的图片,组件 id 为 root,保存文件名:test.png​

async savePhotoFromComponentSnapshot() { 
  let pixmap: image.PixelMap = await componentSnapshot.get('root'); 
  let savePath = await this.getPhotoPicker("test.png") 
  this.savePixmap(pixmap, savePath) 
} 
 
async getPhotoPicker(photoName: string): Promise<string> { 
  // 拉起 photoPicker 获取保存路径 
  let photoSaveOptions = new picker.PhotoSaveOptions(); 
  let photoPicker = new picker.PhotoViewPicker; 
  photoSaveOptions.newFileNames = [photoName]; 
  let photoSaveResult: Array<string> = await photoPicker.save(photoSaveOptions); 
  let savePath = photoSaveResult[0]; 
  return savePath; 
} 
 
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)}`); 
  } 
}
分享
微博
QQ
微信
回复
2024-11-12 15:57:29
相关问题
应用内组件截图保存到用户文件
1115浏览 • 1回复 待解决
HarmonyOS如何将PixelMap保存到相册
570浏览 • 1回复 待解决
HarmonyOS如何把图片保存到手机相册
515浏览 • 1回复 待解决
获取网络图片并保存到相册
1486浏览 • 1回复 待解决
怎么把视频保存到相册以及主机端?
3861浏览 • 1回复 待解决
如何把图片和文案结合,保存到相册
237浏览 • 0回复 待解决
如何将视频保存到相册以及主机端
5594浏览 • 1回复 待解决
有谁知道如何将图片保存到相册
1023浏览 • 1回复 待解决
HarmonyOS 组件尺寸显示异常
44浏览 • 1回复 待解决