1

我正在将一些较大的图像从多图像(金字塔形)tif 转换为 png 格式。最大图像上“identity -verbose”报告的主要部分如下:

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 作曲家为带有此图像的 Silverlight 多尺度图像控件生成输入。我的问题是如何在使用 ImageMagick 处理这些图像时让我的系统崩溃——转换它们需要很长时间。我看了几篇文章,但我似乎无处可去。

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

 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.

这是“识别-列表资源”的结果:

 File         Area       Memory          Map         Disk    Thread
 ------------------------------------------------------------------
 1536     4.1582GB    15.491GiB    30.981GiB    unlimited         2

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

convert "myFN.tif[2]" -limit file 8192GB -limit thread 32 "myFN%d.png"

添加两个极限值似乎没有什么不同。当我运行它时,我平均大约 10% 的 CPU 使用率并且页面文件提交大小为 3BG。我几乎不能说它正在运行。

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

Q2) 更改位于此处的“policy.xml”值(例如文件):C:\Program Files\ImageMagick-6.7.1-Q16\www\source 似乎没有任何影响 - 更改没有出现在下一个“识别列表资源。” 这有什么诀窍吗?

Q3) 对于这个任务还有什么其他的提示或想法吗?

谢谢,大卫

4

4 回答 4

3

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

例如,我看到:

$ 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 的金字塔形 tiff 在小型笔记本电脑上在 10 秒内转换为深度缩放。它正在编写一个包含金字塔的 zip 文件,因此您可以立即上传到服务器。内存使用随图像宽度缩放,因此它会处理非常大的图像 --- 我经常处理 250,000 x 250,000 像素的幻灯片。

文档中有一章介绍 dzsave

于 2017-02-07T08:58:45.163 回答
2

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

如果你想控制 ImageMagick 对系统 RAM 和系统页面文件的影响,那么你可以使用“ MAGICK_MEMORY_LIMIT ”来限制它。事实上,没有太多需要在那里使用大的限制,因为像素缓存的回退位置是映射的内存文件,这些文件的效率与系统页面文件的数量级相同。尝试“MAGICK_MEMORY_LIMIT=2GB”,将像素缓存排除在外(不是说它无论如何都会去那里 - 它比 12GB 大得多。)

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

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

祝你好运!大卫

于 2011-08-03T19:21:56.010 回答
1

与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 个图块。
  • +repage 将所有图块设置在原点 (0,0)
  • “%d”对文件进行编号,从“-scene”设置的#开始。
于 2011-08-03T20:25:49.703 回答
1

Imagemagick 具有处理大文件的格式 ( mpc)。基本上是用磁盘空间换内存。.mpc在 convert和上会生成两个文件,您可以在较小的文件.cache上运行 imagemagick 命令。.mpc这些文件可能仅适用于您当前的 imagemagick 版本,因此它们不适合存档。

于 2020-07-10T16:03:37.357 回答