鸿蒙开发压缩Base64数据
·
async compressBase64Size(base64Str: string, targetWidth: number, targetHeight: number): Promise<string> {
let base64Data: string = ''
if (base64Str.includes(',')) {
base64Data = base64Str.split(',')[1]
} else {
base64Data = base64Str
}
let arrayBuffer: ArrayBuffer = buffer.from(base64Data, 'base64').buffer;
// 2. 创建 ImageSource
let imageSource: image.ImageSource = image.createImageSource(arrayBuffer);
// 3. 设置解码选项,指定期望的尺寸
let decodingOptions: image.DecodingOptions = {
desiredSize: {
width: targetWidth,
height: targetHeight
}
};
try {
// 4. 按指定尺寸解码创建 PixelMap
let pixelMap: image.PixelMap = await imageSource.createPixelMap(decodingOptions);
// 5. 如有需要,可对缩放后的 PixelMap 再次进行质量压缩
let imagePacker: image.ImagePacker = image.createImagePacker();
let packingOptions: image.PackingOption = { format: 'image/jpeg', quality: 80 }; // 这里质量设为80
let compressedArrayBuffer: ArrayBuffer = await imagePacker.packing(pixelMap, packingOptions);
// 6. 将压缩后的 ArrayBuffer 转回 Base64
let compressedBase64: string = buffer.from(compressedArrayBuffer).toString('base64');
return `${compressedBase64}`;
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Compression failed. Code: ${err.code}, message: ${err.message}`);
// throw error;
return ''
}
}
//调用
this.compressBase64Size(base64Str, 300, 300).then((compressedBase64) => {
//todo
})
更多推荐


所有评论(0)