关于鸿蒙开发图片质量压缩问题?图片质量压缩,不改变图片大小,可指定图片压缩参数,类似:
NSData* hdJpeg = UIImageJPEGRepresentation(_hdPicture, 0.9);
关于鸿蒙开发图片质量压缩问题?图片质量压缩,不改变图片大小,可指定图片压缩参数,类似:
NSData* hdJpeg = UIImageJPEGRepresentation(_hdPicture, 0.9);
在鸿蒙(HarmonyOS)开发中,由于鸿蒙系统主要使用Java/Kotlin(对于应用层)或C/C++(对于系统层或Native开发),直接使用iOS的UIImageJPEGRepresentation
方法是不可能的,因为那是iOS SDK的一部分。然而,鸿蒙开发中也存在类似的机制来处理图片的压缩,通常是通过调用图像处理库或使用系统API来实现。
对于Java或Kotlin编写的鸿蒙应用,你可以使用Android的BitmapFactory和Bitmap.compress方法来达到类似的压缩效果。虽然鸿蒙不是Android,但它兼容Android的许多API,特别是与图形和UI相关的API。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, baos); // 这里的90是压缩质量,范围从0-100
byte[] imageBytes = baos.toByteArray();
// 现在你可以使用imageBytes进行存储或网络传输
如果你是在进行Native开发,可以使用OpenCV或其他图像处理库来压缩图片。这些库提供了丰富的图像处理功能,包括图片压缩。
以下是一个使用OpenCV进行JPEG压缩的简化示例(注意,你需要先在你的项目中集成OpenCV库):
#include <opencv2/opencv.hpp>
void compressImage(const std::string& inputPath, const std::string& outputPath, int quality) {
cv::Mat img = cv::imread(inputPath, cv::IMREAD_COLOR);
if (!img.empty()) {
std::vector<uchar> buf;
cv::imencode(".jpg", img, buf, {cv::IMWRITE_JPEG_QUALITY, quality});
cv::imwrite(outputPath, buf);
}
}
在这个例子中,cv::imencode
函数用于将图像编码为JPEG格式,其中可以指定压缩质量。然后,你可以将编码后的数据写入文件或进行其他处理。
鸿蒙开发中的图片质量压缩可以通过多种方式实现,具体取决于你的开发环境和需求。对于应用层开发,使用Java/Kotlin和Android的API是一个常见的选择。对于更底层的Native开发,可能需要依赖OpenCV或其他图像处理库。无论哪种方式,核心思想都是先读取图像,然后将其压缩到指定的质量级别,最后保存或传输压缩后的图像数据。
1 回答414 阅读
1 回答229 阅读
161 阅读
你可以通过options来设置参数,参数越大,质量越好,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-refere...