有一项任务,要编写一个将文件作为JPEG文件的程序。但问题是一些jpeg文件有大尺寸 - 数百兆字节。所以问题是:是否可以裁剪jpeg文件,但不使用像fseek()这样的东西将所有文件加载到RAM中,只解码所需的部分。
这可能吗?如果是,也许有些图书馆会这样做。
UPD。所有这些都将用于深度变焦技术。因此,当深度缩放将要求文件时,该程序将提供它,但这应该是实时的
答案 0 :(得分:5)
有两种方法可以实现这一目标。
第一种是无损裁剪,你不会一直解码文件,而是使用8x8 DCT块。您需要使用具有此功能的库,并且它会对裁剪能力施加一些限制。您无法裁剪到不在DCT方格上的边界,这会将您限制为8或16的倍数,具体取决于文件中的子采样。
第二种方法是使用一个允许您一次读写一行的库。我知道IJG library可以做到这一点,也可能是其他人。这是一种简单的方法,但缺点是图像经过减压/再压缩传递,会失去质量和/或变大。