HarmonyOS APP开发-鸿蒙6中imagePacker.packing API将要废弃的适配《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

 HarmonyOS开发者版本6.0.0(API 20)Release(鸿蒙6) 在2025年9月25日正式发布。相对于HarmonyOS 5.0版本增加了多项新能力及对已有能力的优化。同时也有部分API进行了变更。

本篇内容是《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》这本书整体内容的延续,是咱这本书读者的福利,内容以本书的示例作为基础,适配鸿蒙6过程中,所需要完成的调整。并将这些调整记录分享给大家,本篇内容主要介绍imagePacker.packing API的兼容。

  对本书感兴趣的同学可以点击以下链接进行购买,及参加 我的班级(华为官方)共同学习

​​​​

往期福利:

 《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利博文目录,点击查看

背景介绍

 imagePacker.packing方法已在 API version 13被废弃,包括以下重载:

packing(source: ImageSource | PixelMap, option: PackingOption, callback: AsyncCallback<ArrayBuffer>): void; packing(source: ImageSource | PixelMap, option: PackingOption): Promise<ArrayBuffer>;

兼容方案
使用以下新接口替代废弃的 packing方法:

  1. packToData()
    将 PixelMap或 ImageSource编码为内存中的 ArrayBuffer

    packToData(source: ImageSource, options: PackingOption): Promise<ArrayBuffer>;

  2. packToFile()
    直接编码并写入文件描述符(推荐保存到相册场景):

    packToFile(source: PixelMap, fd: number, options: PackingOption, callback: AsyncCallback<void>): void;


使用示例(保存图片到相册)

async function savePixelMapToAlbum(pixelMap: image.PixelMap,context: Context) {
  // 1. 创建相册文件
  const helper = photoAccessHelper.getPhotoAccessHelper(context);
  const uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpeg');
  const file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);

  // 2. 编码并写入文件
  const imagePacker = image.createImagePacker();
  const packOpts: image.PackingOption = { format: "image/jpeg", quality: 90 }; // 编码选项

  imagePacker.packToFile(pixelMap, file.fd, packOpts, (err) => {
    if (err) {
      console.error(`Failed: code=${err.code}, message=${err.message}`);
    } else {
      console.info('Succeeded in packing image');
      // 3. 主动释放资源(关键!)
      imagePacker.release(() => {
        fileIo.close(file.fd); // 关闭文件描述符
      });
    }
  });
}



使用示例(保存图片到相册)

async function savePixelMapToData(pixelMap: image.PixelMap) {
  const imagePacker = image.createImagePacker();
  const packOpts: image.PackingOption = { format: "image/jpeg", quality: 90 }; // 编码选项
  const buffer: ArrayBuffer = await imagePacker.packToData(pixelMap,packOpts);
  imagePacker.release();
}

  对本书感兴趣的同学可以点击以下链接进行购买,及参加 我的班级(华为官方)共同学习

    ​​​

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    俩毛豆

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值