代码之家  ›  专栏  ›  技术社区  ›  Dave Jarvis James Eichele

哪个C库允许缩放巨大的图像?

  •  8
  • Dave Jarvis James Eichele  · 技术社区  · 14 年前

    -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库可以处理它?

    谢谢您!

    7 回复  |  直到 14 年前
        1
  •  4
  •   Edmund    14 年前

    我相信libpng有一个流接口。我认为这可以用来一次读取图像的一部分;根据图像文件的不同,您可能可以按顺序获得行。然后可以收缩每一行(例如,收缩50%,水平收缩该行并丢弃每一行)并写入输出文件。

    在C中使用libpng需要相当多的代码,但是文档可以很好地指导您完成它。

    http://www.libpng.org/pub/png/libpng-1.2.5-manual.html#section-3.8

        2
  •  1
  •   Lou Franco    14 年前

    你可以尝试制作一个64位的ImageMagick版本,或者看看是否有。我的同事写了一篇博客,里面有一个超级简单的png解码器(假设你有zlib或类似的解码器),这样你就可以看到自己需要的代码了。

    http://www.atalasoft.com/cs/blogs/stevehawley/archive/2010/02/23/libpng-you-re-doing-it-wrong.aspx

    你需要在阅读时重新取样。

        3
  •  1
  •   Windows programmer    14 年前

    几年前我用过cximage。我想最新的版本是 http://www.xdp.it/cximage.htm 离开CodeProject后。

    编辑:对不起,它是C++而不是C。

        4
  •  1
  •   RBerteig Keith Adler    14 年前

    IM imaging toolkit . 它与C很好地链接(但是至少部分地以C++实现),并且与Lua有很好的绑定。从Lua绑定来看,实验应该很容易。

        5
  •  1
  •   jcupitt    7 年前

    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
    

    不快,但也不太破旧。PNG是一种相当慢的格式,使用TIFF会快得多。

    there's a Windows binary ,并且是免费的(LGPL)。除了命令行外,还有C、C++、Python、Ruby、Lua、节点、PHP等绑定。

        6
  •  0
  •   Dave Jarvis James Eichele    14 年前

    你考虑过探索金字塔图像吗?想象一下一个金字塔,图像被分成多个层,每个层有不同的分辨率。每一层都被分割成瓷砖。 这样可以显示图像的缩小版本,也可以显示图像的放大部分视图,而无需重新缩放。

    Wikipedia entry .

    最初的格式之一是FlashPix,我为它编写了一个渲染器。 我还创建了一个金字塔转换器和渲染器的新格式,用于医疗应用程序。一台真正的扫描仪可以对一个器官切片进行90GB以上的扫描,用于癌症研究。 现在你再也听不到任何关于金字塔图像的东西了。但这确实是按需生成缩放图像而不必生成缓存缩放版本的唯一有效方法。

    我记得ImageMagick的支持者格式和转换可能包括FlashPix。 谷歌搜索“图像金字塔”会发现一些有趣的结果。带回一些回忆;—)

        7
  •  0
  •   ZXX    14 年前