Consider the following file:
-rw-r--r-- 1 user user 470886479 2009-12-15 08:26 the_known_universe.png
如何在使用不超过4GB的RAM的情况下,将图像缩小到合理的分辨率?
例如:
$ convert -scale 7666x3833 the_known_universe.png
哪个C库可以处理它?
谢谢!
Consider the following file:
-rw-r--r-- 1 user user 470886479 2009-12-15 08:26 the_known_universe.png
如何在使用不超过4GB的RAM的情况下,将图像缩小到合理的分辨率?
例如:
$ convert -scale 7666x3833 the_known_universe.png
哪个C库可以处理它?
谢谢!
http://www.libpng.org/pub/png/libpng-1.2.5-manual.html#section-3.8
libvips 能够轻松处理大型图像。它是一个流式图像处理库,因此可以同时并行地从源读取、处理和写入目标。通常比imagemagick快3倍到5倍,并且需要很少的内存。
例如,对于我笔记本电脑上最大的PNG文件(1.8GB),我可以使用以下命令将其缩小10倍:
$ vipsheader huge.png
huge.png: 72000x72000 uchar, 3 bands, srgb, pngload
$ ls -l huge.png
-rw-r--r-- 1 john john 1785845477 Feb 19 09:39 huge.png
$ time vips resize huge.png x.png 0.1
real 1m35.279s
user 1m49.178s
sys 0m1.208s
peak RES 230mb
http://www.atalasoft.com/cs/blogs/stevehawley/archive/2010/02/23/libpng-you-re-doing-it-wrong.aspx
你需要在读取时进行重新采样。
我几年前使用过cximage。我认为最新版本在CodeProject之后迁移到了http://www.xdp.it/cximage.htm。
编辑:抱歉,它是C++而不是C。
你可以使用一个用于对大(小)图像执行复杂操作的图像处理库。一个例子是IM成像工具包。它与C语言链接良好(但至少部分实现是C++),并且与Lua有良好的绑定。从Lua绑定开始实验应该很容易。
Jpeg2000可能具有可选的金字塔功能。
我记得ImageMagick的支持格式和转换或许包括FlashPix。谷歌搜索“图像金字塔”会显示一些有趣的结果。勾起了一些回忆;-)
如果您可以将其移动到64位操作系统上,则可以将其作为内存映射文件或等效文件打开,并使用几乎任何库。它不会很快,并且可能需要增加页面/交换文件(取决于操作系统和您想要执行的其他操作),但作为回报,您将不受流式库的限制,因此在进行分辨率降低或切片之前,您将能够执行更多的操作。