首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ImageMagick convert处理大图像-需要更多吞吐量

使用ImageMagick convert处理大图像-需要更多吞吐量
EN

Stack Overflow用户
提问于 2011-07-27 03:22:39
回答 4查看 6.4K关注 0票数 1

我正在将一些较大的图像从多图像(金字塔) tif转换为png格式。来自"identity -verbose“的报告中最重要的部分是最大的图片:

代码语言:javascript
复制
Image: 
  Format: TIFF (Tagged Image File Format)
  Class: DirectClass
  Geometry: 72224x64080+0+0
  Resolution: 72x72
  Print size: 1003.11x890
  Units: PixelsPerInch
  Type: TrueColor
  Base type: TrueColor
  Endianess: MSB
  Colorspace: RGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    ...
  Page geometry: 72224x64080+0+0
    ...
  Scene: 2 of 12
  Compression: JPEG
  Orientation: TopLeft
  Properties:
    ...
  Filesize: 1.389GBB
  Number pixels: 4.6281GB
  Pixels per second: 5.516MB
  User time: 218.277u
  Elapsed time: 13:60.020
  Version: ImageMagick 6.7.1-0 2011-07-06 Q16 http://www.imagemagick.org

我打算使用deepzoom composer来生成Silverlight多尺度图像控件的输入。我的问题是,当我使用ImageMagick处理这些图像时,如何让我的系统瘫痪-转换它们的时间太长了。我看了几篇文章,但似乎什么也没读到。

一些系统和其他相关信息:

代码语言:javascript
复制
 OS: Windows 7 64 bit.
 CPU: Intel Core2 Duo E7300 @ 2.66, 2.67
 RAM: 4.0 GB
 PAGEFILE: 8-12GB on non-OS disk
 "MAGICK_TMPDIR": Yet another empty, non-os disk with 140GB available.

下面是“识别-list资源”的结果:

代码语言:javascript
复制
 File         Area       Memory          Map         Disk    Thread
 ------------------------------------------------------------------
 1536     4.1582GB    15.491GiB    30.981GiB    unlimited         2

我正在运行这个命令来提取上面提到的图像:

代码语言:javascript
复制
convert "myFN.tif[2]" -limit file 8192GB -limit thread 32 "myFN%d.png"

添加两个限制值似乎不会有什么不同。当我运行此命令时,平均CPU利用率约为10%,页面文件提交大小为3BG。我几乎看不出它正在运行。

Q1)我还可以做些什么来让ImageMagick使用更多的系统资源?我发现的大多数“大图像”链接都在问相反的问题。

Q2)更改位于以下位置的"policy.xml“值(如文件):C:\Program Files\ImageMagick-6.7.1-Q16\www\source似乎不会影响任何内容-更改不会显示在下一个”标识-list资源“中。这有什么窍门吗?

Q3)对这项任务还有其他提示或想法吗?

谢谢,大卫

EN

回答 4

Stack Overflow用户

发布于 2017-02-07 16:58:45

libvips可以将金字塔tiff直接转换为深缩金字塔。它是免费的,速度非常快,不需要太多内存。

例如,我看到:

代码语言:javascript
复制
$ vipsheader vips-pyr.tif 
vips-pyr.tif: 18008x22764 uchar, 3 bands, srgb, tiffload
$ time vips dzsave vips-pyr.tif x.zip
real    0m9.763s
user    0m19.700s
sys 0m4.644s
peak memory: 180mb

在一台小型笔记本电脑上,这是一个20,000 x 20,000金字塔形的争执,转换成深度放大只需不到10秒。它正在编写一个包含金字塔的zip文件,因此您可以立即上传到服务器。内存使用与图像宽度成比例,所以它可以处理非常大的图像-我经常处理250,000 x 250,000像素的幻灯片。

有一个chapter in the docs introducing dzsave

票数 3
EN

Stack Overflow用户

发布于 2011-08-04 03:21:56

对于您的(我的)图像,限制因素是像素缓存的大小,它受设置"MAGICK_AREA_LIMIT".的限制默认的4 4GB对于72224 x 64080来说不够大--这至少需要4.4 4GB的设置--试试“MAGICK_AREA_LIMIT=8GB”。

如果您想控制ImageMagick对系统内存和系统页文件的影响,那么可以使用"MAGICK_MEMORY_LIMIT.“来限制这种影响实际上,这里不需要使用很大的限制,因为像素缓存的后备位置是映射内存文件,它们的效率与系统页文件的效率相同。尝试"MAGICK_MEMORY_LIMIT=2GB",以保持像素缓存在那里(这并不是说它无论如何都会去那里-它比12 go大得多)。

您希望将像素缓存放到映射内存中,因此可以尝试使用"MAGICK_MAP_LIMIT=100GB“来利用您拥有的空间。内存映射文件最终将不在系统临时目录中,而是在"MAGICK_TMPDIR".指定的目录中

另外,您还可以尝试使用Q8版本,因为您不需要16位颜色通道。对于该版本,您可以预期大约一半的磁盘io。

祝好运!大卫

票数 2
EN

Stack Overflow用户

发布于 2011-08-04 04:25:50

与Q16版本相比,Q8版本使用一半的磁盘空间和时间来完成转换!此外,如果您最终要将图像拆分为平铺,可以使用以下命令在单个步骤中完成此操作:

convert.exe" "WRL_15_1A.tif[2]" -crop 14409x15396 +repage -scene 0 "temp\WRL_15_1A%d.tif"

  • "2“调用第三个图像(分辨率最高的那个)。
  • -crop参数分别是宽度和高度的1/4,给我们16个平铺。重新分页

+

  • 设置原点(0,0)处的所有磁贴
  • "%d“对文件进行编号,从”-scene“设置的#开始。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6835363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档