HarmonyOS鸿蒙Next中照片的缩略图pixelMap获取

HarmonyOS鸿蒙Next中照片的缩略图pixelMap获取

在获取图片时,有时图片太大,要获取图片的缩略图来显示,用下面的方法

let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext());
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
predicates.equalTo('uri', uri);
let fetchOptions: photoAccessHelper.FetchOptions = {
    fetchColumns: [],
    predicates: predicates
};
phAccessHelper.getAssets(fetchOptions, async (err, fetchResult) => {
    if (fetchResult !== undefined) {
        let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
        if (photoAsset !== undefined) {
            // 获取缩略图
            photoAsset.getThumbnail((err, pixelMap) => {
                if (err == undefined) {
                    pixelMap.getImageInfo().then((value) => {
                        LogUtil.info('getThumbnail successful 大小' + value.size.width + '高' + value.size.height);
                    });
                }
                LogUtil.info('getThumbnail successful ' + JSON.stringify(pixelMap));
            });
        }
    } else {
        LogUtil.error(`error: ${err.code}`);
    }
});

更多关于HarmonyOS鸿蒙Next中照片的缩略图pixelMap获取的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中获取照片缩略图PixelMap,使用PhotoAssetgetThumbnail方法。示例代码:

import picker from '@ohos.file.picker';
import image from '@ohos.multimedia.image';

let photoSelectOptions = new picker.PhotoSelectOptions();
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
photoSelectOptions.maxSelectNumber = 1;

let photoPicker = new picker.PhotoViewPicker();
photoPicker.select(photoSelectOptions).then(async (photoSelectResult) => {
  let asset = photoSelectResult.photoAssets[0];
  let pixelMap = await asset.getThumbnail(image.Size);
  // 使用pixelMap
}).catch(err => {
  console.error('Failed to get thumbnail');
});

该方法直接返回PixelMap对象,无需Java/C介入。注意处理异步操作和权限声明。

更多关于HarmonyOS鸿蒙Next中照片的缩略图pixelMap获取的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中获取照片缩略图的代码基本正确,但可以优化几个地方:

  1. 建议使用Promise方式替代回调,代码会更简洁:
try {
  const photoAsset = await fetchResult.getFirstObject();
  const pixelMap = await photoAsset.getThumbnail();
  const imageInfo = await pixelMap.getImageInfo();
  console.log(`缩略图尺寸:${imageInfo.size.width}x${imageInfo.size.height}`);
} catch (err) {
  console.error('获取缩略图失败:', err);
}
  1. 如果需要指定缩略图尺寸,可以使用getThumbnail的重载方法:
photoAsset.getThumbnail({
  width: 200,  // 目标宽度
  height: 200  // 目标高度
});
  1. 注意内存管理,使用完pixelMap后应该调用release()释放资源:
pixelMap.release();
  1. 获取缩略图前建议先检查photoAsset是否存在thumbnail属性:
if (photoAsset.thumbnail) {
  // 存在缩略图缓存
}

当前实现的主要流程是正确的,通过PhotoAccessHelper获取PhotoAsset后调用getThumbnail()方法是标准做法。

回到顶部