有一个任务,要编写一个程序来裁剪 JPEG 文件。但问题是一些 jpeg 文件有很大的尺寸——数百兆字节。所以问题是:是否可以裁剪 jpeg 文件,但不将所有文件加载到 RAM,使用 fseek() 之类的东西,只解码需要的部分。
这可能吗?如果是,也许有一些图书馆也在做同样的事情。
更新。这一切都将用于深度变焦技术。所以当 deep zoom 请求文件时,这个程序会给出,但这应该是实时的
最佳答案
有两种方法可以做到这一点。
第一个是无损裁剪,您不会一直解码文件,而是使用 8x8 DCT block 。您需要使用具有此功能的库,它对裁剪功能有一些限制。您无法裁剪到不在 DCT 正方形上的边界,这将您限制为 8 或 16 的倍数,具体取决于文件中的子采样。
第二种方法是使用允许一次读取和写入一行的库。我知道 IJG library可以做到这一点,可能还有其他人。这是一种简单的方法,但缺点是图像会经过解压/再压缩过程,质量会下降和/或变大。
关于c++ - 裁剪大 jpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235439/