2011-06-02 37 views
1

我在磁盘上有一个不太正常的JPEG文件 - 这个JPEG文件在图像尾端(FFD9)后面附加了额外的垃圾数据。虽然这个JPEG文件仍然可以由JPEG查看器打开。在C++中无损处理JPEG

我希望删除图像结尾(FFD9)后面的附加信息。约束条件是:

  1. 必须通过程序来完成
  2. 必须是无损
  3. 必须使用本地代码,例如C++

我发现的一种方法是使用IrfanView命令行工具重新保存文件,使用无损JPG_TRANSFORM的命令:/ jpg_rotate。后面的附加数据会自动删除。

但是,还有另一种方法可以在C++代码中完成它,如果可能的话,我不希望使用像IrfanView这样的exes来完成它。我希望尽一切努力来保持精益。

我在考虑检测文件结束(FFD9),然后将EOF前的缓冲区保存到另一个JPEG中。但是,我怎样才能无损地保存缓冲区?

+4

如果您只是简单地复制比特位并包括EOF标记,那么对此有什么损失? – 2011-06-02 03:47:25

回答

3

我想这是一个文件处理问题,而不是图像处理相关。

您只需将图像文件中的所有数据写入EOF,然后将其写入生成的图像文件中。