【问题标题】:Extract JPEG from TIFF file从 TIFF 文件中提取 JPEG
【发布时间】:2012-02-03 14:18:38
【问题描述】:

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

我对 TIFF 文件结构了解很多,但对 JPEG 文件结构几乎一无所知。我现在编写的代码将 JPEGTable 标记数据从 tiff 标头读取到一个字节数组中(意味着它转到标记指向的偏移量并在那里读取它)以及另一个将目标 Tile 读取为字节的代码简介大批。然后我将 Table 字节数组写入一个新文件,然后将 Tile 字节数组写入该文件。 Table 数组的最后 2 个字节我用 0xFF、0xFF 和 Tile 数组的前 2 个字节写入,因为我发现两个数组都开始和分别以 jpeg SOI 和 EOI 序列结束,如果我有超过 1 个,则任何图像程序都无法打开这些文件。

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()

问题 所以这就是我现在所处的位置,问题是我提取的瓷砖都是粉红色的,应该是白色的,几乎就像彩色底片。它不是纯粉红色,我可以在原始图像中看到我知道的对象的轮廓。有谁知道我该如何解决这个问题?此外,我在 VB.NET 中执行此操作,但我认为在这种情况下语言并不重要,因为它似乎更像是我做错的概念/算法/文件结构问题。

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

编辑:我在 2002 年 3 月 22 日的 Adob​​e Photoshop TIFF 技术说明中发现了一个部分:

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

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

【问题讨论】:

  • 我想看看其中一个原始图块以及生成的 JPG。这将帮助我们所有人形象化正在发生的事情。谢谢。
  • @Boo 谢谢,没想到。完成
  • 我已经编写了自己的 TIFF 和 JPEG 编解码器;我大概可以帮你解决问题。请将原始 TIFF 文件连同您提取的图块一起发送给我,我可能会发现问题(pobox dot com 上的 bitbank)。从您的示例图像来看,量化表看起来很乱。
  • 跟进...TIFF 文件使用 RGB 颜色空间,因此无法将 JPEG 切片写入为单独的 JFIF 文件,因为它们使用与正常 YCrCb 不同的颜色空间进行编码。跨度>

标签: .net jpeg tiff


【解决方案1】:

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

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

最后一个字节定义变换;在这种情况下,0 表示 RGB 颜色空间。您可以在此处阅读更多信息:

Oracle JPEG metadata doc

【讨论】:

  • 这周我要试试这个!谢谢! JPEG 文档中提到可以存储 RBG 数据而不是转换,但它太模糊了!
  • 在我的例子中,因为我还有一个霍夫曼表要写,所以我从 Tiff 写了霍夫曼表,减去最后 2 个字节,即图像标签的结尾,然后我写了 16 个字节上面的序列,然后是我的图像字节,从字节 2 开始。谢谢!
猜你喜欢
  • 2022-07-04
  • 1970-01-01
  • 2015-10-21
  • 2012-05-08
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多