JPEG 字节顺序对编码有何影响?

2023-11-27

我目前正在做一个涉及图片的大项目。我遇到的大问题之一是图片的字节顺序(jpeg 更清楚)。我一直认为在我们的现代世界中我们不必担心这个问题,但现在我不确定。

我做什么:

  1. 我向 IP 摄像机发出 HTTP 请求,摄像机返回给我一个字节数组。
  2. 我使用以下方法将这些字节解析为 .NET 中的对象 ImageImage.FromStream.
  3. 我将图像对象保存到硬盘上的物理文件中。

然后,这些图片在我的应用程序的另一个模块中使用,该模块使用第三方“查看器”对图像进行一些操作。该查看器适用于使用 Windows XP 和 Windows Vista 中的计算机生成的所有图片。但是当使用Windows 7机器生成图片时,图片全乱了。

假设使用 Windows XP 创建的图片将称为 PictureXP,使用 Windows 7 创建的图片将称为 Picture7。 我使用exiftools检查了文件,发现PictureXP和Picture7之间有2个字段不同。

PictureXP:Exif 字节顺序:Little-endian
图 7:Exif 字节顺序:Big-endian
Picture7 还有一个附加字段:用户评论:。

这两张图片可以在任何照片查看器中正常打开,只有在第 3 方查看器中,图片显示完全混合,三张图片之间的唯一区别是这些字段。

我想知道的是:

  1. 第三方是否可能需要在其软件中添加额外的代码,以便需要处理图片的字节序?我猜所有的图片程序都会处理这个问题?
  2. 我是否可以将 jpeg 的字节序更改为始终为小字节序?我在某处读到 jpeg 文件的内容始终应该采用相同的字节顺序,但似乎没有考虑 exif 数据。如果可能的话,我会喜欢 .NET 中的解决方案......
  3. 任何有助于解决这种情况的问题也将被视为答案。

EDIT 1: 我找到了这个article确认 exif 标头中找到的字节顺序仅适用于 exif 标头,并且 jpeg 文件始终采用大字节序。那么有没有办法更改 exif 标头,以便第 3 方软件能够读取他需要的内容?


好吧,我通过向 Phil 提出问题找到了答案,Phil 是exiftool

你可以看到我和他的话题here.

  1. 是的,这是可能的。第 3 方 SDK 不知道 exif 标头可以使用小端或大端进行编码,并且仅使用小端进行读取。将我的所有图片更改为小端模式解决了问题。
  2. 答案分为两部分:首先,正如我的编辑中所述,jpeg 的数据始终是大端字节序。其次,exif 标头可以是小端字节序或大端字节序,并且可以使用 exiftool 对其进行更改。

在命令行中:

exiftool -all= -tagsfromfile test.jpg -all:all -unsafe -exifbyteorder=little-endian test.jpg

您还可以在此找到几乎任何语言的该工具的包装器page.

非常感谢您对这个问题和我收到的答案的兴趣。

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

JPEG 字节顺序对编码有何影响? 的相关文章

  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include

随机推荐