数据流具有JPEG文件的所有正确标识,例如FFD8(扫描开始标记)和FFD9(扫描结束标记)。如果这是一个小于65500*65500像素的图像,则将数据流保存为jpeg文件后,我可以正常打开该文件。
在JFIF头部中,FFC0标记后的第三个和第四个字节表示图像高度;之后的两个字节表示图像宽度。然而,对于大于65500*65500像素(实际上是122880*78848像素)的图像,这四个字节都是零。我按照this(255-263行)更改了它们为255、220、255、220。当我右键单击图像并选择详细信息时,我发现Windows照片查看器将分辨率读取为65500*65500,尽管它们并不代表真实的像素分辨率。问题是,当我尝试打开图像时,它显然被错误解码了。
所以我的问题是:如何正确打开这样的jpeg文件?或者说,如何正确地将整个图像内容解码到内存中?
我现在正在使用MATLAB来理解文件结构。最终我将使用Python + OpenCV(或者使用Python + Cython + libjpeg-turbo如果必要)将整个图像读入内存。
vips
。它在这方面表现出色... http://stackoverflow.com/a/36377369/2836621 - Mark Setchell