首页 文章

从TIFF文件中提取JPEG

提问于
浏览
6

Background 我有一个大的TIFF文件,用JPEG压缩(新的,TIFF标准的压缩7)并且是平铺的 . 我需要做的是将这些图块提取到单个.jpg文件 . 我需要能够在解压缩/重新压缩图像数据的情况下执行此操作,因为这将需要太多的计算资源,因此我所知道的所有库都是不可能的 .

我对TIFF文件结构了解很多,但几乎没有关于JPEG文件结构的知识 . 我现在编写的代码将来自tiff头的JPEGTable标签数据读入一个字节数组(意味着它转到标签指向的偏移量并在那里读取)和另一个将目标Tile读入一个字节的代码模糊阵列 . 然后我将Table字节数组写入一个新文件,然后将Tile字节数组写入该文件 . Table数组的最后2个字节我用0xFF,0xFF写入,并且对于Tile数组的前2个字节是相同的,因为我发现两个数组分别以jpeg SOI和EOI序列开始和结束,如果我有更多除了每个文件之外,任何图像程序都无法打开文件 .

For i as Integer = 0 to TableArray.Count-3
    stream.WriteByte(TableArray(i))
Next
stream.WriteByte(255)
stream.WriteByte(255)
stream.WriteByte(255)
stream.WriteByte(255)
For i as Integer = 2 to TileArray.Count-1
    stream.WriteByte(TileArray(i))
Next
stream.Close()

Problem 所以这就是我现在所处的问题,问题是我提取的瓷砖都是粉红色的,应该是白色的,几乎就像一个彩色底片 . 在这种情况下,语言真的很重要,因为它似乎更像是一个概念/算法/文件结构问题,我做错了 .

如果有人希望我发布我正在使用的一些代码,我可以,只需要知道哪个部分 .
Extracted

Original

编辑:我在2002年3月22日的Adobe Photoshop TIFF技术说明中找到了一个部分,其中说:

从TIFF到交换JPEG的转换更复杂 . 如果所有条带使用相同的JPEG表并且没有RSTn标记,则可以非常轻松地转换基于条带的TIFF / JPEG文件:只需删除开销标记并在条带之间插入RSTn标记 . 转换平铺图像更难,因为数据通常不是正确的顺序(除非图块只有一个MCU高) . 这仍然可以无损地完成,但是它将需要撤消和重做熵编码,以便可以更新DC系数差异 .

不确定这是否与我的问题有关 .

1 回答

  • 4

    Photoshop生成的TIFF文件的难点在于它们支持将RGB色彩空间写入JPEG压缩数据 . 如果从TIFF文件中提取单个图块并将其作为独立的JPEG图像写入,则无法正确显示,因为解码器会假定颜色空间为YCbCr . 只要查看应用程序遵循Adobe APP14标记,就有一个解决方案 . 此标记中包含一个定义变换(颜色空间)的字节 . 如果在SOI之前插入此字节序列,则图像将在许多查看器上正确显示 .

    FF EE 00 0E 41 64 6F 62 65 00 64 80 00 00 00 00

    最后一个字节定义了变换;在这种情况下,0表示RGB色彩空间 . 你可以在这里读更多关于它的内容:

    Oracle JPEG metadata doc

相关问题