C++ 中 JPEG 的无损操作

发布于 2024-11-11 02:27:59 字数 460 浏览 3 评论 0原文

我的磁盘上有一个不太正常的 JPEG 文件 - 该 JPEG 文件在图像结尾 (FFD9) 后面附加了额外的垃圾数据。不过,JPEG 查看器仍然可以打开该 JPEG 文件。

我希望删除图像结束 (FFD9) 后面的那些附加信息。限制是:

  1. 必须以编程方式完成
  2. 必须无损
  3. 必须使用本机代码,例如 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:

  1. Must be done programatically
  2. Must be lossless
  3. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

悲歌长辞 2024-11-18 02:27:59

我想这是一个文件处理问题,与图像处理无关。

您所需要做的就是将图像文件中直到 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文