c++ - 裁剪大 jpeg

标签 c++ jpeg large-files crop

有一个任务,要编写一个程序来裁剪 JPEG 文件。但问题是一些 jpeg 文件有很大的尺寸——数百兆字节。所以问题是:是否可以裁剪 jpeg 文件,但不将所有文件加载到 RAM,使用 fseek() 之类的东西,只解码需要的部分。

这可能吗?如果是,也许有一些图书馆也在做同样的事情。

更新。这一切都将用于深度变焦技术。所以当 deep zoom 请求文件时,这个程序会给出,但这应该是实时的

最佳答案

有两种方法可以做到这一点。

第一个是无损裁剪,您不会一直解码文件,而是使用 8x8 DCT block 。您需要使用具有此功能的库,它对裁剪功能有一些限制。您无法裁剪到不在 DCT 正方形上的边界,这将您限制为 8 或 16 的倍数,具体取决于文件中的子采样。

第二种方法是使用允许一次读取和写入一行的库。我知道 IJG library可以做到这一点,可能还有其他人。这是一种简单的方法,但缺点是图像会经过解压/再压缩过程,质量会下降和/或变大。

关于c++ - 裁剪大 jpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235439/

相关文章:

C# 保存大图像

linux - 试图从 git repo 中删除一个大文件夹但花费的时间太长

c++ - 填充对 vector

javascript - 将内联 SVG 保存为 JPEG/PNG/SVG

image-processing - 如何在频域中旋转图像?

tcp - 通过 TCP 将 JPEG NSData 发送到 Python 服务器

java - 适用于 Java 的优秀且有效的 CSV/TSV 阅读器

c++ - 使用2D数组存储天气数据。 C++

c++ - C++ 中的 OpenGL - 运行时崩溃

c++ - 使用yaml-cpp错误解析YAML文件