文件IO的方式读取jpeg图片的分辨率

1、读取jpeg图片分辨率的两种方式

1.1 使用libjpeg库

可以使用libjpeg库读取JPEG图像文件,并获取图像的分辨率(宽度和高度),简单demo示例如下:

#include <stdio.h>
#include <jpeglib.h>int main() {struct jpeg_decompress_struct cinfo;struct jpeg_error_mgr jerr;FILE *infile;if ((infile = fopen("input.jpg", "rb")) == NULL) {fprintf(stderr, "Can't open input file\n");return 1;}cinfo.err = jpeg_std_error(&jerr);jpeg_create_decompress(&cinfo);jpeg_stdio_src(&cinfo, infile);jpeg_read_header(&cinfo, TRUE);printf("JPEG Image Resolution:\n");printf("Width: %d pixels\n", cinfo.image_width);printf("Height: %d pixels\n", cinfo.image_height);jpeg_destroy_decompress(&cinfo);fclose(infile);return 0;
}

1.2 使用文件IO的方式

1.2.1 JPEG文件格式


JPEG图片格式组成部分:SOI(文件头)+APP0(图像识别信息)+[APPn(0xFFEn)]可选+ DQT(定义量化表)+SOF0(图像基本信息)+ DHT(定义Huffman表) + DRI(定义重新开始间隔)+ SOS(扫描行开始)+ EOI(文件尾)

其中粗体部分是必须的,下面我就来解释一下这些信息吧。

JPEG的文件分为若干个块,以FF开头,如下图所示

第一列是标记符,第二列十六进制数据,第三列含义

读取JPEG图像的分辨率而不使用libjpeg库,您可以手动解析JPEG文件格式。JPEG文件的结构是复杂的,包含了很多标记和段,其中包含了图像的信息,包括分辨率。JPEG文件中包含了SOF0(Start of Frame)标记,它是一种用于描述图像参数的标记。在JPEG文件的数据流中,SOF0标记通常用来指示图像的基本参数,包括图像的宽度、高度、颜色空间等信息。SOF0标记的格式如下:

- 第一个字节:标记的固定部分,通常为0xFF

- 第二个字节:标记类型,SOF0的类型为0xC0

- 第三、四个字节:标记长度,指示了接下来的数据长度

- 第五个字节:精度,通常为8位

- 第六、七个字节:图像高度

- 第八、九个字节:图像宽度

下面是一个简化的C语言程序,用于读取JPEG图像文件的分辨率:

1.2.1 demo代码实现

#include <stdio.h>int main() {FILE *file;char filename[] = "input.jpg";unsigned char buffer[2];int width, height;file = fopen(filename, "rb");if (file == NULL) {printf("Error opening file\n");return 1;}// 找到图像宽度和高度的段while (fread(buffer, sizeof(buffer), 1, file)) {if (buffer[0] == 0xFF && buffer[1] == 0xC0) {fseek(file, 3, SEEK_CUR);fread(buffer, sizeof(buffer), 1, file);height = buffer[0] * 256 + buffer[1];fread(buffer, sizeof(buffer), 1, file);width = buffer[0] * 256 + buffer[1];break;} else {fseek(file, -1, SEEK_CUR);}}printf("JPEG Image Resolution:\n");printf("Width: %d pixels\n", width);printf("Height: %d pixels\n");fclose(file);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口测试、postman、测试点提取【主】

接口测试是测试系统组件间接口的一种测试 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点 测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系 文章目录 HTTP接口 & Web Service接口RESTful接口…

sentinel热点参数流控

1、概念 热点参数限流会统计传入参数中的热点参数&#xff0c;并根据配置的限流阈值与模式&#xff0c;对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制&#xff0c;仅对包含热点参数的资源调用生效。 2、示例 2.1、目的 对于如下的/get接口的参…

what is apache?

Apache 通常指 Apache Software Foundation (ASF) 或 Apache HTTP Server&#xff0c;两者都是计算机软件领域的重要实体。 Apache 软件基金会 (ASF)&#xff1a;Apache 软件基金会是一个开发开源软件项目的非营利组织。它为涵盖软件开发各个方面的广泛项目提供支持&#xff0c…

Redis 教程系列之Redis PHP 使用 Redis(十二)

PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前&#xff0c; 我们需要确保已经安装了 redis 服务及 PHP redis 驱动&#xff0c;且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动&#xff1a;下载地址为:https://github.com/phpredis/phpredis/releases。 P…

使用启智OpenI平台体验Open-Sora笔记

OpenI准备部分 镜像代码仓 创建云脑任务 新建调试任务 镜像选择 如果不想体验整个安装配置过程的话&#xff0c;我准备了一个Open-Sora的环境镜像应该可以直接开箱即用 地址&#xff1a; 192.168.204.22:5000/default-workspace/99280a9940ae44ca8f5892134386fddb/image:Open…

sql注入五-WEB攻防-注入工具SQLMAPTamper编写指纹修改高权限操作目录架构

演示案例&#xff1a; 数据猜解-库表列数据&字典权限操作-文件&命令&交互式提交方法-POST&HEAD&JSON绕过模块-Tamper脚本-使用&开发分析拓展-代理&调试&指纹&风险&等级 #参考&#xff1a; https://www.cnblogs.com/bmjoker/p/9326258.…

PMBOK第八版、项目管理AI标准...PMI标准今年有这些进展

项目管理实践标准不断在演变&#xff0c;PMI作为项目管理领域的权威机构&#xff0c;一直致力于与全球各行各业的项目实践者一同探索和研究最新的行业标准&#xff0c;确保PMI标准符合全球项目专业人士当前能力建设与职业发展的需要。 今年以来&#xff0c;我们发布了一系列PM…

NetSuite学习笔记 - 人工成本字段如何按员工所属公司货币显示

在员工档案中输入了人工成本1000&#xff0c;在列表中显示的跟详情中显示的不一样&#xff1f;为什么&#xff1f;怎么办&#xff1f; 详情页中维护人工成本为1000 列表中显示为140.77 1. 开始我以为是因为用的中文环境&#xff0c;可能选了两个不同的字段&#xff0c;切换到英…

学习笔记:MYSQL数据库基础知识

MYSQL数据库基础知识学习笔记 MYSQL基础学习数据库相关概念现主流数据库排名数据模型SQL分类SQL数据库基础操作 2024/3/27 学习资料&#xff1a;黑马程序员:MYSQL MYSQL基础学习 数据库和数据库管理系统(DBMS) 数据库: 是存储数据的集合&#xff0c;包括表、视图、索引等对象…

client-go中ListAndWatch机制,informer源码详解

文章首发地址&#xff1a; 学一下 (suxueit.com)https://suxueit.com/article_detail/s9UMb44BWZdDRfKqFv22 先上一张&#xff0c;不知道是那个大佬画的图 简单描述一下流程 client-go封装部分 以pod为例 、先List所有的Pod资源&#xff0c;然后通过已经获取的pod资源的最大版…

阿里云 -- 连接云服务器ECS、管理云服务器ECS、WordPress 页面配置

连接云服务器ECS 1. 远程连接云服务器ECS&#xff0c;点击实例最右侧操作列的远程连接按钮&#xff0c;并在弹出的对话框中点击立即登录 2. 登录云服务器ECS&#xff0c;通过密码认证方式&#xff0c;输入用户名和密码 提示&#xff1a;新创建的ECS实例状态即使为运行中&#…

微信投票小程序源码系统:创建新活动+多模板一键切换 带完整的安装代码包以及搭建教程

随着社交媒体的普及&#xff0c;投票活动已经成为人们表达意见、参与决策的重要方式。微信小程序作为一种新兴的应用形态&#xff0c;具有用户基数大、使用门槛低的特点&#xff0c;非常适合举办投票活动。然而&#xff0c;对于普通用户来说&#xff0c;开发一个功能完善的投票…

xilinx的高速接口构成原理和连接结构

本文来源&#xff1a; V3学院 尤老师的培训班笔记【高速收发器】xilinx高速收发器学习记录Xilinx-7Series-FPGA高速收发器使用学习—概述与参考时钟GT Transceiver的总体架构梳理 文章目录 一、概述&#xff1a;二、高速收发器结构&#xff1a;2.1 QUAD2.1.1 时钟2.1.2 CHANNEL…

前端html常用标签 笔记

一、基础 开始标签 结束标签 大部分是成对出现的标签&#xff0c;这个是空标签(/放在最后&#xff0c;/可以省掉) 缩进 向后Tab 、前向ShiftTab 红的就是元素属性 标签可以使内容有一些特殊的表现: 给body颜色后&#xff1a; h1 span(连起来) 标签&#xff1a; 标题h1 h2 h3 …

介绍部署esxi8.0产品的方式

什么是esxi esxi的中文叫裸机虚拟机管理器 ESXi是由VMware公司开发的一种裸机虚拟机管理器&#xff0c;全称为VMware ESXi。 ESXi是一种虚拟化技术&#xff0c;专门设计用于在物理服务器上运行虚拟机&#xff0c;它的主要特点是能够最大限度地降低硬件配置要求并简化部署过程…

Android 性能优化实例分享-内存优化 兼顾效率与性能

背景 项目上线一段时间后,回顾重要页面 保证更好用户体验及生产效率&#xff0c;做了内存优化和下载导出优化&#xff0c;具体效果如最后的一节的表格所示。 下面针对拍摄流程的两个页面 预览页 导出页优化实例进行介绍&#xff1a; 一.拍摄前预览页面优化 预览效果问题 存在…

tcp 协议详解

什么是 TCP 协议 TCP全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制。TCP 是一个传输层的协议。 如下图&#xff1a; 我们接下来在讲解 TCP/IP 协议栈的下三层时都会先解决这两个问题&#xff1a; 报头与有效载荷如何…

EtherCAT转RS232网关在风电领域的应用

开疆智能EtherCAT转RS232网关在风电领域的应用主要体现在以下几个方面&#xff1a; 1.数据采集与传输&#xff1a;在风力发电设备中&#xff0c;传感器和执行器的数据采集和传输至关重要。EtherCAT转RS232网关可以将风力发电设备中的RS232通信协议转换为EtherCAT协议&#xff0…

何恺明重提十年之争——模型表现好是源于能力提升还是捕获数据集偏置?

想象一下&#xff0c;如果把世界上所有的图片都找来&#xff0c;给它们放到一块巨大的空地上&#xff0c;其中内容相似的图片放得近一些&#xff0c;内容不相似的图片放得远一些&#xff08;类比向量嵌入&#xff09;。然后&#xff0c;我随机地向这片空地撒一把豆子&#xff0…

【Linux实践室】Linux用户管理实战指南:用户密码管理操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;用户密码存放地及方式2.2 &#x1f514;使用…