【问题标题】:How-to improve the performance of cropping images with ImageMagick?如何提高使用 ImageMagick 裁剪图像的性能?
【发布时间】:2014-04-16 20:17:06
【问题描述】:
convert image.png -crop 256x256 +repage +adjoin out_%d.png

拍摄一张 20000x8000 的大图像大约需要 114 秒。 (大约会生成 4000 个 256x256 png)

是否有任何 imagemagick 选项可以提高裁剪速度?

【问题讨论】:

    标签: imagemagick crop imagemagick-convert graphicsmagick


    【解决方案1】:

    您也可以考虑libvips。它可以快速完成这种操作,而且不会占用太多内存。

    我尝试了一个基准测试。在这台机器上使用 20,000 x 8,000 像素的 RGB PNG(四核 / 八线程 i7)。我明白了:

    $ vipsheader big.png 
    big.png: 20000x8000 uchar, 3 bands, srgb, pngload
    $ /usr/bin/time -f %M:%e convert big.png -crop 256x256 +repage +adjoin out_%d.png
    2582228:61.78
    $ echo out* | wc
          1    2528   31754
    

    %M:%e 表示显示峰值内存和经过的时间,因此需要 2.5gb 的 RAM 和 62s 的实时时间来制作 2528 个 PNG 切片。

    libvips 有一个名为dzsave(DeepZoom 保存)的命令,它可以并行写入一组图块,并将图像流式传输而不是将整个内容加载到内存中。通过几个选项,您可以使其产生与 convert 命令相同的输出。

    我明白了:

    $ /usr/bin/time -f %M:%e vips dzsave big.png x --depth one --tile-size 256 --overlap 0 --suffix .png
    161952:9.20
    $ echo x_files/0/*.png | wc
          1    2528   49450
    

    所以 161mb 的内存和 9.2 秒的实时时间来制作相同的 2528 个文件。

    文档中有一个章节是关于dzsave 解释如何使用它:

    https://libvips.github.io/libvips/API/current/Making-image-pyramids.md.html

    正如 Glenn 所说,大部分时间都花在 PNG 编码和解码上。 libpng 非常慢,它使用 deflate 压缩,甚至更慢。如果您改用 TIFF,它会变得更快:

    $ /usr/bin/time -f %M:%e vips dzsave big.tif x --depth one --tile-size 256 --overlap 0 --suffix .tif
    163476:1.34
    

    现在只有 1.34 秒。 JPG 会更快(因为 IO 会更少),但我想这不适用于平面图。

    【讨论】:

      【解决方案2】:

      如果您的原始图像有 8 位样本,您可以做的一件事是确保使用 ImageMagick 的“Q8”版本,而不是默认的“Q16”。每个像素占用 8 个字节(16 位 R、G、B、A)即使只是一张黑白图。使用 Q8 可以将其减半。您可以使用“-limit”选项更改行为,以使用更多内存而不是磁盘。

      -limit 选项在“选项”文档中描述 ImageMagick。

      您可以使用“-quality 1”(选择仅 Huffman 压缩)和“子”PNG 过滤器来提高 PNG 压缩的速度。如果您知道图像的颜色少于 256 种,“-quality 0”可能更有效(消耗的时间大致相同,但生成的文件会更小)。

      【讨论】:

      • 其实图片都是不一样的。很多都是典型的平面图。我仍然想知道为什么收割需要这么长时间?你知道有什么好的链接可以解释幕后发生的事情吗?我会认为作物只是一个简单的提取位操作?!
      • 有关“-limit”选项的详细信息,请参阅 (imagemagick.org/script/command-line-options.php) 文档。
      猜你喜欢
      • 2013-08-06
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 2018-07-15
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多