使用开源jpeg库保存jpg图像

#define SafeDeleteArr(pArr) {delete[] (pArr); (pArr) = 0;}
bool RGBSavePic(uint8_t *pRGBBuffer, int iFrame, int width, int height)
{
	//jpeg 压缩对象
	struct jpeg_compress_struct cinfo;
	//错误器
	struct jpeg_error_mgr jerr;

	int row_stride;

	//JSAMPROW row_pointer[1];   // 一行位图  

	cinfo.err = jpeg_std_error(&jerr);

	jpeg_create_compress(&cinfo);

	//指定压缩后的图像所存放的目标文件,注意,目标文件应以二进制模式打开
	FILE *fp;
	fp = fopen(g_sPicFileName.c_str(), "wb");
	if (fp == NULL)
		return false;

	jpeg_stdio_dest(&cinfo, fp);

	cinfo.image_width = width;    // 为图的宽和高,单位为像素   
	cinfo.image_height = height;
	cinfo.input_components = 3;   // 在此为1,表示灰度图, 如果是彩色位图,则为3   
	cinfo.in_color_space = JCS_RGB; //JCS_GRAYSCALE表示灰度图,JCS_RGB表示彩色图像 


	jpeg_set_defaults(&cinfo);

	//指
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于JPEG图片的无损优化,可以使用FreeImage来实现。FreeImage是一个开源图像处理,支持多种图像格式的读取、处理和输出。 以下是使用FreeImage对JPEG进行无损优化的Java代码示例: ```java import java.io.File; import java.io.IOException; import org.freeimage.FreeImage; import org.freeimage.FreeImageIO; import org.freeimage.FreeImageLoader; import org.freeimage.FreeImageRuntimeException; public class JpegOptimizeDemo { public static void main(String[] args) { try { // 读取JPEG图片 FreeImage image = FreeImageLoader.load(FreeImage.Format.JPEG, new File("test.jpg").getPath(), 0); // 获取JPEG图片的压缩参数 FreeImage.SetMetadataKeyValue(image, "JPEG_QUALITY", "100"); // 保存优化后的JPEG图片 FreeImageIO.setWriteFlags(FreeImageIO.JPEG_QUALITYSUPERB); FreeImage.Save(FreeImage.Format.JPEG, image, new File("test_optimized.jpg").getPath(), 0); // 释放内存 FreeImage.Unload(image); } catch (IOException | FreeImageRuntimeException e) { e.printStackTrace(); } } } ``` 在上述代码中,先使用FreeImageLoader.load方法读取JPEG图片,然后使用FreeImage.SetMetadataKeyValue方法获取JPEG图片的压缩参数,再使用FreeImage.Save方法将优化后的JPEG图片保存到文件中。最后使用FreeImage.Unload方法释放内存。 需要注意的是,FreeImage需要在系统中预先安装,并在Java项目中添加FreeImage.jar文件。此外,FreeImage支持的图像格式较多,可根据需要选择合适的图像格式进行优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值