C++ 中 JPEG 的无损操作
我的磁盘上有一个不太正常的 JPEG 文件 - 该 JPEG 文件在图像结尾 (FFD9) 后面附加了额外的垃圾数据。不过,JPEG 查看器仍然可以打开该 JPEG 文件。
我希望删除图像结束 (FFD9) 后面的那些附加信息。限制是:
- 必须以编程方式完成
- 必须无损
- 必须使用本机代码,例如 C++
我发现的一种方法是使用 IrfanView 命令行工具重新保存文件,使用无损 JPG_TRANSFORM 的命令:/jpg_rotate。后面的附加数据会被自动剥离掉。
但是,是否有另一种方法可以在 C++ 代码中执行此操作,如果可能,我不希望使用像 IrfanView 这样的 exe 来执行此操作。我希望在代码中完成所有事情以保持精简。
我正在考虑检测文件结尾(FFD9),然后将 EOF 之前的缓冲区保存到另一个 JPEG 中。但是,如何无损地保存缓冲区呢?
I have a JPEG file on disk which is not quite normal - this JPEG file has additional rubbish data appended behind End Of Image (FFD9). This JPEG file can still be opened by JPEG viewers though.
I wish to remove those additional information behind End Of Image (FFD9). The constraints are:
- Must be done programatically
- Must be lossless
- Must use native code, e.g. C++
One way I've found out is to re-save the file using IrfanView command-line tool, using lossless JPG_TRANSFORM's command: /jpg_rotate. The additional data behind are automatically stripped off.
However, is there another way in which I can do it in C++ code, If possible, I do not wish to use exes like IrfanView to do it. I wish to do everything in code to keep things lean.
I am thinking of detecting the End Of File (FFD9), then save the buffer before EOF into another JPEG. But, how can I save the buffer losslessly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想这是一个文件处理问题,与图像处理无关。
您所需要做的就是将图像文件中直到 EOF 的所有数据写入生成的图像文件中。
I guess this is a file handling question and NOT an Image Processing related.
All you need to do write all data till EOF in your Image file into the resultant Image file.