无需解码图像即可获取 JPEG 分辨率

2024-02-20

我试图在不解码文件的情况下获取 JPEG 图像的分辨率。我从互联网上获得了几个样本,但没有一个可以正常工作。似乎是这样因为manyJPEG 文件不是标准文件,但任何图形应用程序(Irfan、PSP、Firefox 等)都可以打开它们。

JPEG 的标头应该是:

typedef struct _JFIFHeader
{
  BYTE SOI[2];          /* 00h  Start of Image Marker     */
  BYTE APP0[2];         /* 02h  Application Use Marker    */
  BYTE Length[2];       /* 04h  Length of APP0 Field      */
  BYTE Identifier[5];   /* 06h  "JFIF" (zero terminated) Id String */
  BYTE Version[2];      /* 07h  JFIF Format Revision      */
  BYTE Units;           /* 09h  Units used for Resolution */
  BYTE Xdensity[2];     /* 0Ah  Horizontal Resolution     */
  BYTE Ydensity[2];     /* 0Ch  Vertical Resolution       */
  BYTE XThumbnail;      /* 0Eh  Horizontal Pixel Count    */
  BYTE YThumbnail;      /* 0Fh  Vertical Pixel Count      */
} JFIFHEAD;

然而,当我查看其中一个非标准文件时,X密度和Y密度字段是错误的。但同样,所有图形应用程序都可以读取这个非标准文件。

有谁知道一段可以实际读取所有 JPEG 文件的 Delphi 代码吗?


德尔福 7、Win 7 32 位


我不知道所有 JPEG 文件,但您需要处理twoJPEG 的常见文件格式。由于 JPEG 是一种压缩方法而不是文件格式,因此全世界已经开发了几种在文件中存储 JPEG 图像数据的方法。您最有可能遇到的两个是 JFIF 和 EXIF。上面的代码涵盖了 JFIF,但不处理 EXIF。这两者在很大程度上不兼容,但都是 JPEG,因此您需要检测并处理是否使用标头信息,因为它们是不同的。

以分辨率为例。 EXIF的字段是x 分辨率 and y 分辨率,与 X/Y 密度方法相比。

I would:

  1. 阅读一下这两种格式(JFIF 和 EXIF)。我发现 维基百科是一个很好的起点 在此参考(对于过去的一些 我做过的项目),但大多数 可能有一些关于这方面的重要信息 主题也是如此。

    JFIF: http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format

    EXIF: http://en.wikipedia.org/wiki/Exif http://en.wikipedia.org/wiki/Exif

  2. 编写代码以使用起始标头检测格式

  3. 独立处理每种格式

  4. 把整个东西包起来,这样你就可以把 JPEG 扔给它并得到 密度。这也将为您提供一个很好的机会来扔其他帮助代码来处理 JPEG 处理的“有趣”世界

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无需解码图像即可获取 JPEG 分辨率 的相关文章

  • 如何读取和更改 TEdit 控件的值?

    我有一个表格TForm1有 5TEdit and 2 TBitBtn 我还需要该程序 以便在输入数字数据后Edit1 and Edit2 on BitBtn1Click Edit1 and Edit2值将被求和并显示在Edit3 你想做这样
  • 如何在拥有句柄时检查给定进程是否正在运行

    我在用ShellExecuteEx启动应用程序 成功开始阅读后TShellExecuteInfo hProcess获取已启动进程的句柄 我想定期检查我的应用程序启动的进程是否仍在运行 两个或多个同名进程可以同时运行 我想确保我的应用程序正在
  • 如果加载 dll 找不到依赖项,有什么方法可以捕获错误吗?

    我正在编写一个 Windows 32 位程序 可以使用多个可能的 dll 之一 所以它尝试依次加载每个 dll 使用SysUtils SafeLoadLibrary如果加载成功 它就会使用该 dll 不幸的是 其中一些 dll 静态链接到其
  • 使用 Delphi 读取 Excel 电子表格

    我需要使用 Delphi 2010 读取和写入 Excel 电子表格 没什么花哨的 只需读取和写入不同工作表上特定单元格和范围的值 需要在没有安装 Excel 的情况下工作并支持 Excel 2007 我看过的一些东西 我尝试过使用ADO
  • 似乎有时 Delphi 是区分大小写的 - “覆盖方法应该与祖先的大小写匹配”

    今天我遇到了一个 奇怪 的提示 覆盖方法 xxxx 应匹配祖先 yyyy 的大小写 解决方案是完全按照祖先中的方式声明方法名称 我相信这是自 Delphi Net 编译器以来编译器中保留的东西 与祖先中完全相同的方法声明方法使编译器 沉默
  • D2010编译行数差异

    构建项目时 有两个地方会报告源代码行数 在编译进度对话框中 项目下 信息 在 Delphi 2007 中 对于我们正在构建的项目 这两个数字是相同的 在 Delphi 2010 中 这两个数字截然不同 1st 计数多出 100 万行或 40
  • 为什么 TImage 旋转我的图像?

    编写一个移动应用程序 它从安全网站提取图像 如下所示 第一个图像 提取不正确 注意网络版本与移动版本 第二个图像在网站上正确显示 但 Delphi TImage 由于某种原因正在旋转它我不明白为什么 旋转设置为 0 并且在 TImage 组
  • 对于大型简单数据库,SQLite 和 DISQLite 有何比较?

    两者有什么区别SQLite http www sqlite org and DISQLite http www yunqa de delphi doku php products sqlite3 index为什么我要选择其中一个而不是另一个
  • 有用的 Delphi 代码模板

    我用 Delphi 编程已经两年多了 我大概只有 5 个自定义模板 我觉得我应该有更多 如果有人有任何特别有用的东西 那么在 stackoverflow 上有一个很好的存储库就太好了 我不在乎您使用的是 Delphi 2009 语法还是 D
  • Delphi + Synapse:如何检查我是否仍然连接

    我在用TTCPBlockSocket http synapse ararat cz doc help blcksock TTCPBlockSocket html对于 TCP IP 应用程序 问题是我无法确定连接何时丢失 GetLastErr
  • 在 Delphi 中将对象转换为 OleVariant

    有没有办法在 OleVariant 中传递包装并解开 TObject 后代 我正在尝试跨自动化对象传递 TObject 我知道这不是一个好主意 但我没有更好的选择 该对象将在来自同一自动化 dll 的对象之间传递 如果这有什么区别的话 像这
  • Delphi 2005 Web 服务问题

    我在尝试通过 Delphi 访问 Web 服务时遇到问题 我使用了 2007 版 WSDLimp 工具的 java WSDL 看起来它已正确创建了所有对象 然而 当我制作一个调用该服务的测试程序时 每个对象都是空的 如果我在 HTTPRIO
  • 德尔福和Doxygen

    我想使用 doxygen pas2dox 记录我的源代码 当我设置好所有内容 包括过滤器和提取选项 提取所有内容 时 doxygen 运行良好 但生成的文档仅包含源文件作为链接 并且没有提取类型 方法 过滤后的源看起来不错 有任何提示如何定
  • Android中如何检测程序的终止?

    当 Windows 程序终止时 它会调用事件处理程序 例如 OnClose OnDestroy 和析构函数 Destroy 当我想保存一些 INI 设置时 这些地方就是我要保存的地方 我为所有这些事件编写了事件处理程序 但当我终止程序时它们
  • Delphi 应用程序被 Google Chrome 视为“危险”

    我经常用Delphi 2009制作数学软件 并将其发布在我的网站上 然而 去年左右 Google Chrome 开始认为我的一小部分 但数量不断增加 EXE 是 有害的 并且 Google Chrome 拒绝下载它们 例如 今天我编写了一个
  • 如何检查文件是否有备用数据流?

    Delphi 有没有办法检查文件是否有任何备用数据流 看一下 Win32 APIFindFirstStreamW https msdn microsoft com en us library windows desktop aa364424
  • 在该对象调用的事件期间销毁该对象

    我有一个按钮 它的 OnClick 事件调用一个销毁按钮的过程 但随后 线程 想要返回到 OnClick 事件 并且我遇到了访问冲突 我完全被难住了 您需要在按钮的所有代码执行完毕后销毁该按钮 执行此操作的标准方法是将用户定义的消息发布到表
  • 指针^ 与 s[1]

    在读取数据的函数中 数据含义只字符串 从磁盘 我应该更喜欢哪个 哪个更好 A DiskStream Read Pointer s Count or B DiskStream Read s 1 Count Note 我知道两者都有相同的结果
  • 如何为每个线程自动全局初始化/取消初始化某些内容?

    我有一个单位initialization and finalization部分 该单元包含一个复杂的对象 该对象在initialization并毁于finalization 但是 该对象还包含一个 ADO 连接 这使得跨线程使用它时出现问题
  • 使用 IOmniTaskControl/TOmniWorker 时等待 Invoke 完成

    我使用 TOmniWorker 创建了 IOmniTaskControl 以便我可以定期在特定线程上运行代码块 因此 我将根据需要在此 IOmniTaskControl 上调用 Invoke 当我这样做时 有时需要等待与该工作相关的执行完成

随机推荐

  • python 中的公平信号量

    python 中是否有可能有一个公平的信号量 它可以保证阻塞线程按照它们调用的顺序解除阻塞acquire 您可能必须用其他活动部件来构建一个 例如 创建一个Queue Queue 每个听众都会发布一个全新的Event 然后它会等待 当需要唤
  • delphi 中打印到非默认打印机

    我想使用 Delphi 将打印作业发送到打印机 理想情况下 我希望能够在不让用户从打印对话框中选择打印机的情况下执行此操作 我希望能够使用 Windows 默认打印机以外的打印机 我尝试通过打印机名称设置打印机 Vcl Printers P
  • 如何处理尺寸未知的二维数组?

    我正在编写一个用于矩阵乘法的 C 函数 它需要两个二维整数数组 如果我知道输入数组的尺寸 我就可以做到这一点 但我想创建一个更通用的函数 如何找到它们的尺寸 以及当我在编译时不知道产品的尺寸时如何返回数组 如果您只有指向数组开头的指针 则无
  • 来自 C# 的多个 CMD 命令?

    所以我想知道 如何使用 C 在 CMD 中执行多个命令 我的意思是 我有一个 exe 文件 它依赖于通过 cmd 变量 VAMP PATH 查找文件 是的 我正在使用 VAMP 插件 所以我在 CMD 中使用它的方式是 set VAMP P
  • 安卓JSON解析

    我需要有关我的代码的建议 我正在尝试解析 PHP 函数生成的 JSON 数组json encode My json data streamer froggen yt length 25078 streamer wingsofdeath yt
  • Twitter Bootstrap 包含 jQuery 吗?

    Does 推特引导程序 http getbootstrap comv3 包括jQuery http jquery com 或者我需要单独包含 jQuery 吗 如果它确实包含 jQuery 则包含什么版本 编号 的 jQuery 以及使用
  • 禁用向访问网站的用户提示“记住我的密码”

    所以我有一个 ASP Net MVC 网站 我想知道是否有可能让用户必须手动输入密码 这样浏览器就不会自动填充密码 这似乎是一个简单的问题 但通过谷歌搜索我只是得到了有关客户如何禁用提示的说明 我从来没有用过它 但是有一个自动完成属性 当禁
  • 在提交到服务器之前如何在 Fine Uploader 中获取图像的尺寸并验证它?

    我使用的是5 11 10版本精美上传者 http fineuploader com 我知道有一个验证 http docs fineuploader com branch master api options html validationF
  • 创建对角矩阵(更高维度)

    我有一个n m矩阵 说A 我想创建以下内容m m n矩阵 说B for j 1 n B j diag A j end 我该如何做到这一点而不需要循环 Thanks UPDATE 我已经编辑了问题以修复示例代码中的拼写错误 我相当确定您的示例
  • SqlAlchemy(Flask+Postgres):如何仅更新json字段的特定属性?

    我有一个表 其中有一列声明为 json 我需要通过向 json 值添加键值来更新记录 model class User db Model tablename users loginId db Column db String 128 nul
  • 批量删除文本文件中的一行?

    我正在绞尽脑汁地寻找一个简单的 DOS 批处理文件示例 它将删除数千个 txt 文件的第一行 并以原始文件名保存该文件 在另一个程序执行批处理之后 我必须在外部处理之后的每个文件的开头添加已删除的行 由 X Y Z 组成的文本字符串 您可以
  • 如何从谷歌脚本发送错误状态代码,如错误请求(400)?

    这是一个doPostGoogle App 内的函数返回一个你好世界信息 function doPost e return ContentService createTextOutput Hello World 现在假设我只想接受发布到此 G
  • Tomcat 部署 WAR 文件,但应用程序未在 docker 容器中启动

    我有一个带有注释的 Spring Framework MVC 应用程序 它包含所有依赖项 当tomcat docker容器启动时 它成功部署并打包WAR文件 但应用程序无法启动 Catalina 日志有成功的启动和部署行 tomcat 1
  • 为什么我的 strace 命令不适用于 Fish?

    我正在尝试启动一个可以使用 Bash 启动但不能使用 Fish 启动的命令 On Bash这运作良好 sudo strace f s3000 p pgrep f teams d p o tmp debug log strace Proces
  • 给 UITextView 一个可点击的 URL 链接

    嗨 我已经解决这个问题有一段时间了 我已经读了几篇文章 但我不明白如何制作可点击的UITextView在互联网上发送 这是我的代码 func transformText text String underlined Bool linkURL
  • 查找总和最接近目标的数字组合

    因此 我有浮点数的组合 还有一些目标值 我想看看这些浮点数的任何组合 允许重复 的总和是否可以尽可能接近目标值 现在我从简单开始 我想看看是否可以使用当前的浮点数列表来达到一个目标值 该总和最多可以偏离目标 0 5 我搜索了很多其他代码 但
  • React-native run-ios 找不到 iPhone X 模拟器 | XRPackageModel 9.0.omo

    我首先在 Expo 上启动了我的项目 然后将其退出 现在 我尝试运行命令react native run ios 但它返回此错误 CoreData 注释 无法在路径 Applications Xcode app Contents Appli
  • 如何在 SwiftUI 中将项目与 VStack 内的顶部对齐?

    我刚刚开始使用 swiftui 我面临着 ui 对齐问题 以下代码从图像顶部创建一个空间 VStack alignment leading Image item imageUrl resizable aspectRatio contentM
  • 如何在android中的数组适配器中设置文本颜色

    在我的应用程序中 我创建了一个列表视图并在列表中添加了一些文本 在我的编码部分中 文本被添加为数组适配器以具有复选框 在布局中 我为列表视图指定了白色 因此文本看起来非常暗淡 如何将文本颜色设置为黑色 我已将列表视图放置在布局文件中 并将文
  • 无需解码图像即可获取 JPEG 分辨率

    我试图在不解码文件的情况下获取 JPEG 图像的分辨率 我从互联网上获得了几个样本 但没有一个可以正常工作 似乎是这样因为manyJPEG 文件不是标准文件 但任何图形应用程序 Irfan PSP Firefox 等 都可以打开它们 JPE