HarmonyOS鸿蒙Next中实现图片压缩功能示例代码
HarmonyOS鸿蒙Next中实现图片压缩功能示例代码
介绍
本示例基于imagePackerss Api实现了图片压缩功能,并将压缩后的图片转成base64格式。开发者可将压缩后的图片用于arkui或者H5中进行图片展示。
效果预览

使用说明
打开应用,展示选择图片并压缩按钮,点击按钮,拉起系统相册,相册里选择图片或者拍照获取图片,选择完毕后点击完成,即可返回应用主页面,展示压缩后的图片。
实现思路
-
构造
selectAndCompressPicture()函数,执行以下操作:- 首先将
this.pictures数组清空. - 调用
PictureUtils.selectPicture()方法,等待其返回结果,并将结果存储在selectResult中。 - 从
selectResult中获取photoUris数组,遍历该数组。 - 对于每个uri,调用
PictureUtils.compressPicture方法进行图片压缩,压缩格式为image/jpeg,质量为10。 - 压缩完成后,将压缩后的
ArrayBuffer数据转换为base64字符串,并添加data:image/png;base64,前缀,存储到this.pictures数组中。
- 首先将
-
遍历
this.pictures数组中的元素,并为每个元素创建一个Image对象,以此来加载展示压缩后返回的图片。 -
构造
selectPicture()函数,用于选择图片。函数接收一个数字参数selectNumber,表示要选择的图片数量。具体实现过程为:- 创建一个
photoAccessHelper.PhotoSelectOptions实例photoSelectOptions,并设置其MIMEType为photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,表示只选择图像类型的媒体文件。 - 将
photoSelectOptions的maxSelectNumber属性设置为selectNumber,以指定最大选择数量。 - 创建一个
photoAccessHelper.PhotoViewPicker实例photoPicker。 - 调用
photoPicker.select(photoSelectOptions)方法进行图片选择,并使用await等待结果,最终将结果作为Promise<photoAccessHelper.PhotoSelectResult>类型返回。
- 创建一个
-
构造
compressPicture()函数,用于压缩图片。具体实现过程为:- 首先,以只读模式打开文件系统中
pictureUri对应的文件,使用fs.openSync方法,并获取文件描述符file。 - 使用
fs.statSync方法根据文件描述符获取文件大小,并将其存储在size变量中。 - 创建一个大小为
size的ArrayBuffer,并使用fs.readSync方法将文件内容读取到buf中。 - 关闭文件,使用
fs.closeSync方法。 - 使用
image.createImageSource方法将buf转换为图像源。 - 创建
imagePackerApi作为图像打包器,通过image.createImagePacker方法。 - 创建
packOpts对象,包含压缩格式format和压缩质量quality。 - 调用
imagePackerApi.packing方法对图像源进行压缩,并使用await等待结果,最终将结果作为Promise类型返回。
- 首先,以只读模式打开文件系统中
更多关于HarmonyOS鸿蒙Next中实现图片压缩功能示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中实现图片压缩功能,可以通过使用Image和ImagePacker类来实现。以下是一个简单的示例代码:
import image from '@ohos.multimedia.image';
import fileIo from '@ohos.fileio';
async function compressImage(filePath: string, outputPath: string, quality: number) {
// 打开图片文件
let file = await fileIo.open(filePath, fileIo.OpenMode.READ_ONLY);
let fileStat = await fileIo.stat(filePath);
let buffer = new ArrayBuffer(fileStat.size);
await fileIo.read(file.fd, buffer);
// 创建ImageSource对象
let imageSource = image.createImageSource(buffer);
let imagePacker = image.createImagePacker();
// 设置压缩参数
let packingOptions = {
format: "image/jpeg",
quality: quality
};
// 打包图片
let packedImage = await imagePacker.packing(imageSource, packingOptions);
// 将压缩后的图片写入文件
let outputFile = await fileIo.open(outputPath, fileIo.OpenMode.WRITE_ONLY | fileIo.OpenMode.CREATE);
await fileIo.write(outputFile.fd, packedImage);
await fileIo.close(outputFile.fd);
await fileIo.close(file.fd);
}
// 调用示例
compressImage("/path/to/input.jpg", "/path/to/output.jpg", 80);
这段代码首先打开一个图片文件,读取其内容并创建ImageSource对象。然后,通过ImagePacker类设置压缩参数,并将图片打包为指定质量的JPEG格式。最后,将压缩后的图片写入输出文件。
更多关于HarmonyOS鸿蒙Next中实现图片压缩功能示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,可以通过ImageSource和ImagePacker类来实现图片压缩。以下是一个简单的示例代码:
import ohos.media.image.ImageSource;
import ohos.media.image.ImagePacker;
import ohos.media.image.PixelMap;
public class ImageCompressor {
public void compressImage(String inputPath, String outputPath, int quality) {
// 读取原始图片
ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
ImageSource imageSource = ImageSource.create(inputPath, srcOpts);
PixelMap pixelMap = imageSource.createPixelmap(null);
// 创建ImagePacker并设置压缩质量
ImagePacker imagePacker = ImagePacker.create();
ImagePacker.PackingOptions packingOptions = new ImagePacker.PackingOptions();
packingOptions.quality = quality;
// 将压缩后的图片写入输出路径
imagePacker.initializePacking(outputPath, packingOptions);
imagePacker.addImage(pixelMap);
imagePacker.finalizePacking();
}
}
这段代码展示了如何读取图片、设置压缩质量并保存压缩后的图片。通过调整quality参数(0-100),可以控制图片的压缩程度。

