我目前正在从事一个涉及图片的大型项目。其中一个主要问题是关于图片(更明确地说,是JPEG格式)的尾数。我一直以为在我们现代化的世界中不必再为此担心,但现在我不确定了。
我的操作步骤如下:
1. 我向IP摄像头发送HTTP请求,该摄像头返回给我一个字节数组。 2. 我使用.NET将这些字节解析成图像对象Image,使用方法为
我的操作步骤如下:
1. 我向IP摄像头发送HTTP请求,该摄像头返回给我一个字节数组。 2. 我使用.NET将这些字节解析成图像对象Image,使用方法为
Image.FromStream 。
3. 我将我的图像对象保存到硬盘上的物理文件中。
然后,我的应用程序的另一个模块会使用这些图片,并使用第三方“查看器”对图片进行一些操作。该查看器可以处理在Windows XP和Windows Vista计算机上生成的所有图片。但是当使用Windows 7机器生成图片时,图片就会出现问题。
假设使用Windows XP创建的图片将被称为PictureXP,而使用Windows 7创建的图片将被称为Picture7。我使用exiftools检查了这些文件,并发现PictureXP和Picture7之间有两个不同的字段。
PictureXP:Exif Byte Order:Little-endian
Picture7:Exif Byte Order:Big-endian
Picture7还有一个附加字段:User Comment:。
这三张图片都可以在任何照片查看器中正常打开,只有在这个第三方查看器中才会显示混乱,而这三张图片之间的唯一区别就是这些字段。
我想知道的是:
- 第三方是否需要在其软件中添加其他代码以处理图片的字节序?我猜所有的图片程序都会处理吧?
- 我能否改变我的JPEG文件的字节序为小端序?我在某个地方读到,JPEG文件的内容总是应该处于相同的字节序,但似乎这并不考虑Exif数据。如果可以的话,我希望能够用.NET解决。
- 任何有助于解决这种情况的东西也将被视为答案。
编辑1:我找到了这篇文章证实,在Exif头中发现的字节顺序仅适用于Exif头,而JPEG文件始终是大端序。那么有没有办法更改Exif头,使得第三方软件能够读取所需内容呢?