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,使用PhotoAsset
的getThumbnail
方法。示例代码:
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中获取照片缩略图的代码基本正确,但可以优化几个地方:
- 建议使用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);
}
- 如果需要指定缩略图尺寸,可以使用getThumbnail的重载方法:
photoAsset.getThumbnail({
width: 200, // 目标宽度
height: 200 // 目标高度
});
- 注意内存管理,使用完pixelMap后应该调用release()释放资源:
pixelMap.release();
- 获取缩略图前建议先检查photoAsset是否存在thumbnail属性:
if (photoAsset.thumbnail) {
// 存在缩略图缓存
}
当前实现的主要流程是正确的,通过PhotoAccessHelper获取PhotoAsset后调用getThumbnail()方法是标准做法。