libjpeg库

news2024/11/18 1:43:44

库安装就不说了,我是直接下载编译好的库

Independent JPEG Group (ijg.org)

这个需要自己编译

可以使用的代码

#include <stdio.h>
#include <jpeglib.h>
#include <stdlib.h>

void compress_jpeg(const char* input_filename, const char* output_filename, int quality) {
    struct jpeg_decompress_struct cinfo_in;
    struct jpeg_compress_struct cinfo_out;
    struct jpeg_error_mgr jerr_in, jerr_out;

    FILE* input_file = NULL;
    errno_t err1 = fopen_s(&input_file, input_filename, "rb");
    if (err1) {
        fprintf(stderr, "Error opening input file.\n");
        exit(1);
    }

    FILE* output_file = NULL;
    errno_t err2 = fopen_s(&output_file, output_filename, "wb");
    if (err2) {
        fprintf(stderr, "Error opening output file.\n");
        exit(1);
    }


    if (!input_file || !output_file) {
        fprintf(stderr, "Error opening files.\n");
        exit(1);
    }

    // Decompress
    cinfo_in.err = jpeg_std_error(&jerr_in);
    jpeg_create_decompress(&cinfo_in);
    jpeg_stdio_src(&cinfo_in, input_file);
    jpeg_read_header(&cinfo_in, TRUE);
    jpeg_start_decompress(&cinfo_in);

    JSAMPLE* buffer = (JSAMPLE*)malloc(cinfo_in.output_width * cinfo_in.output_components);

    // Compress
    cinfo_out.err = jpeg_std_error(&jerr_out);
    jpeg_create_compress(&cinfo_out);
    jpeg_stdio_dest(&cinfo_out, output_file);
    cinfo_out.image_width = cinfo_in.image_width;
    cinfo_out.image_height = cinfo_in.image_height;
    cinfo_out.input_components = cinfo_in.num_components;
    cinfo_out.in_color_space = cinfo_in.out_color_space;

    jpeg_set_defaults(&cinfo_out);
    jpeg_set_quality(&cinfo_out, quality, TRUE);
    jpeg_start_compress(&cinfo_out, TRUE);

    while (cinfo_in.output_scanline < cinfo_in.output_height) {
        jpeg_read_scanlines(&cinfo_in, &buffer, 1);
        jpeg_write_scanlines(&cinfo_out, &buffer, 1);
    }

    jpeg_finish_decompress(&cinfo_in);
    jpeg_finish_compress(&cinfo_out);

    jpeg_destroy_decompress(&cinfo_in);
    jpeg_destroy_compress(&cinfo_out);

    free(buffer);
    fclose(input_file);
    fclose(output_file);
}

int main() {
    const char* input = R"(C:\Users\Administrator\Desktop\ThreeData\weixingOBJ\tex\Tile_+000_+000_23_00013300_0000.jpg)";
    const char* output = R"(C:\Users\Administrator\Desktop\ThreeData\weixingOBJ\tex\outlibjpeg.jpg)";
    compress_jpeg(input, output, 50);  // 50 is the quality, it can be from 0 to 100.

    printf("Compression done. Check %s\n", output);
    return 0;
}

顺便把这个库集成到OSG库中

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1082895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

域名,二级域名,局域网自定义域名

什么是域名 域名是互联网上用于标识和定位网站的字符串。它提供了一个易于记忆和使用的方式来访问网站&#xff0c;代替了使用 IP 地址的复杂形式。域名通常由多个部分组成&#xff0c;用点&#xff08;.&#xff09;分隔。 域名的结构是从右向左逐级划分的&#xff0c;每个部…

原理:用UE5制作一个2D游戏

选中资产图片右键--Sprite Actions--Apply Paper2D Texture Settings 制作场景 把它丢到场景里&#xff0c;并把坐标归零 创建图块集tileset 打开新建的tile set&#xff0c;根据最小图块设置最小尺寸单元 选择需要的图块单元&#xff0c;add box 对新建的tile set右键创建til…

UI 自动化测试框架:PO 模式+数据驱动!

1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 PO 模式的设计思想与…

msvcp120.dll是什么东西?找不到msvcp120.dll怎么修复?

在计算机技术的世界里&#xff0c;我们经常会遇到各种错误和问题。其中之一就是MSVCP120.dll的丢失。这是一个非常常见的问题&#xff0c;许多用户在运行某些程序时会遇到这个错误。 MSVCP120.dll是什么&#xff1f; MSVCP120.dll&#xff0c;全名是Microsoft Visual C Runti…

Netty深入浅出Java网络编程学习笔记(二) Netty进阶应用篇

目录 四、应用 1、粘包与半包 现象分析 粘包 半包 本质 解决方案 短链接 定长解码器 行解码器 长度字段解码器——LTC 2、协议设计与解析 协议的作用 Redis协议 HTTP协议 自定义协议 组成要素 编码器与解码器 编写测试类 Sharable注解 自定义编解码器能否使用Sharable注解 3、在…

Python jieba库的使用说明

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、jieba库基本介绍 jieba库概述 jieba是优秀的中文分词第三方库 中文文本需要通过分词获得单个的词语 jieba是优秀的中文分词第三方库&#xff0c;需要额外安…

自动驾驶软件和人工智能

自动驾驶汽车的核心在于其软件系统&#xff0c;而其中的机器学习和深度学习技术是使车辆能够感知、理解、决策和行动的关键。本文将深入探讨这些技术在自动驾驶中的应用&#xff0c;包括感知、定位、路径规划以及道路标志和交通信号的识别。 1. 机器学习和深度学习在自动驾驶中…

10.11 作业

fun.h #ifndef __FUN_H__ #define __FUN_H__#include <iostream>using namespace std;// 定义一个Sofa类 class Sofa { private:string sitting;public:Sofa(); // 无参构造函数Sofa(string s); // 有参构造函数~Sofa(); …

leetcode:169. 多数元素(同归于尽消杀法)

一、题目&#xff1a; 函数原型&#xff1a; int majorityElement(int* nums, int numsSize) 参数解释&#xff1a; int *nums是一个指针&#xff0c;用于接收数组名 int numsSize是数组的元素个数 二、思路&#xff1a; 用同归于尽消杀法&#xff1a; 因为题目条件给出多数元素…

windows创建服务:更新服务信息乱码问题(ChangeServiceConfig)

因为小项目需要创建windows服务&#xff0c;安装微软官方示例一切都挺顺利&#xff0c;代码运行后发现配置的信息在系统里显示乱码。打开注册表发现的确是乱码。这就排除软件读取得问题&#xff0c;而是调用ChangeServiceConfig系统函数写入时就发生了乱码。让我在网上查找了一…

1.4python 引入其他 py 文件或模块_python量化实用版教程(初级)

python 引入其他 py 文件或模块 在 Python 中&#xff0c;我们可以使用 import 语句来引用其他 py 文件中的代码&#xff0c;这样可以避免代码的重复编写&#xff0c;提高代码的复用性和可维护性。 引用其他 py 文件的方式 Python 提供了多种方式来引用其他 py …

Nginx部署前端网页,Nginx搭建静态资源服务器

文章目录 一、准备静态网页二、安装nginx三、部署网页四、显示文件及文件夹目录信息 一、准备静态网页 我们以dlib静态网页为例&#xff0c;使用nginx部署前端网页&#xff1a; 下载地址&#xff1a;http://dlib.net/ 下载完成之后上传至linux服务器。 在docs目录下&#xff…

在 Elasticsearch 中实现自动完成功能 3:completion suggester

在这篇博文中&#xff0c;我们将讨论 complete suggester - 一种针对自动完成功能进行优化的 suggester&#xff0c;并且被认为比我们迄今为止讨论的方法更快。 Completion suggester 使用称为有限状态转换器的数据结构&#xff0c;该结构类似于 Trie 数据结构&#xff0c;并且…

PIM基础

1.PIM概述 PIM协议简介 PIM称为协议无关组播。协议无关指的是与单播路由协议无关&#xff0c;即PIM不需要维护专门的单播路由信息。作为组播路由解决方案&#xff0c;它直接利用单播路由表的路由信息&#xff0c;对组播报文执行RPF检查&#xff0c;检查通过后创建组播路由表项…

《Java极简设计模式》第08章:外观模式(Facade)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

conda 创建虚拟环境

1.为什么要创建虚拟环境 我们在做开发或者跑论文实验可能会同时进行多个任务&#xff0c;这些任务可能会依赖于不同的python环境&#xff0c;比如有的用到3.6有的用到3.7&#xff0c;这时我们创建不同版本的python&#xff0c;放到虚拟环境中给不同的任务分别提供其所需要的版本…

Docker简单案例

我们安装完Docker之后就可以练习了. 镜像 案例1-拉取、查看镜像 1&#xff09;首先去镜像仓库搜索nginx镜像&#xff0c;比如 : Docker Hub Container Image Library | App Containerization 搜索我们想要拉取的镜像 , 例如: nginx 复制命令&#xff1a; docker pull nginx …

【智慧燃气】中国智慧燃气现状、关键问题分析及构架分析!

关键词&#xff1a;智慧燃气、数据分析、数据挖掘、数字燃气、智慧燃气平台 一、智慧燃气发展现状 智慧燃气概述 对于智慧燃气的概念&#xff0c;燃气行业目前并未有统一的定义&#xff0c;基本上还处于各自阐述的阶段。小编认为&#xff0c;城乡智慧燃气系统&#xff08;以…

400电话号码办理

办理400虚拟电话号码的需求在如今的商业环境中越来越普遍。无论是小型企业还是个人创业者&#xff0c;拥有自己的400虚拟电话号码都能为他们的业务带来巨大的便利和形象提升。那么&#xff0c;如何高效地办理400虚拟电话号码呢&#xff1f; 首先&#xff0c;选择可信赖的服务提…

干货:如何在前端统计用户访问来源?

在前端统计用户访问来源是一个常见的需求&#xff0c;通过获取访问来源信息&#xff0c;我们可以了解用户是通过直接访问、搜索引擎、外部链接等途径进入我们的网站或应用。下面是一个详细的介绍&#xff0c;包括方法和实现步骤。 一、获取HTTP Referer HTTP Referer是HTTP请…