昨天上Flickr想找一张图片. 下了一张大图, 大到会出现"Original"链接的那种. 比如
http://www.flickr.com/photos/21506428@N03/3948966731/
点击放大, View All Size, 直接将Original Size的图片保存.
存下来以后, 在win (2k3)中看其属性, 宽高是0x0. 感觉很奇怪. 此图用ms他家自带的"图片和传真查看器"和mspaint还有他家赞助的Paint.Net均看不了. 但是Picasa却可以照看不误. 记得以前Flickr的保护机制是用个1x1的小图来遮一下, 用一点技巧就可以下到原始图片. 而现在的这个"Original"图片明显已经不是原始图片了. 只好找了一下JPEG结构规范, 这里有一片文章很厚道, 是说如何不读入整个图片而取得宽高信息的:
http://www.anttikupila.com/flash/getting-jpg-dimensions-with-as3-without-loading-the-entire-file/
可见, 在SOF0这个段, 也就是FF C0 00 11 08之后的四位, 保存着此图的宽高信息.

看了一下Flickr上下的这个图, 发现此位置的信息很正常, 对应信息的十进制就是1280x906. 实验了一下, 修改掉这个宽高信息, 图片无法以正常的宽高显示. 又上Flickr下了一张大图, 比对了一下两张图片, 发现从文件最开始的FF直到00 3F 00这一段都是相同的(除了这个宽高信息各异以外). 于是尝试用WinHEX将另外一张正常的图片开头的这个区域覆盖掉, 别忘了将FF C0 00 11 08之后的四位改成这个正常图片应有的宽高值, 果然Windows又读成0x0了, Picasa依然能正常看. 虽然由于破坏了DQT段的信息, 使得图片的颜色上稍微有点区别, 但是还是基本重现了Flickr对图片做的工作.
用一个叫JPEGSnoop的工具分析了一下Flickr上这个原始大图的区段, 发现在文件的开始这块的APP0段后果然有一个不太正常的APP1段:
*** Marker: APP1 (xFFE1) ***
OFFSET: 0x00000014
length = 2
Identifier = [踋
Identifier [(null)] not supported. Skipping remainder.
猜测这个0x0的现象, 可能是与JPEG的特性有关: 有部分区段正常就可以显示出来. 而ms和Google的设计思想不同, ms的设计比较保守, 认为所有区段(至少是一些特别的区段)都正常才能读, 而Google的实现, 则是能读就尽量读.
后记: 重启到OSX下看了一下, 自带的"预览"程序读这图完全没问题, 属性里的宽高值也是正常的1280x906 ... ms你情何以堪哪 ...
当然前提是, 以上猜测是正确的, 这东西, 谁知道呢. 不过可以知道的是, 这系统是不能用了, 不靠谱啊. [s:11]