我正在将一些较大的图像从多图像(金字塔)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)此任务的其他任何提示或想法?
谢谢, 大卫
答案 0 :(得分:1)
对于(我的)图像,限制因素是像素缓存的大小,受设置“ 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与该版本。
祝你好运! 大卫答案 1 :(得分:1)
Imagemagick具有用于处理大文件(mpc
)的格式。基本上将磁盘空间用于ram。转换时会生成两个文件.mpc
和.cache
,您可以在较小的.mpc
文件上运行imagemagick命令。这些文件只能在您当前的imagemagick版本上使用,因此不适合存档。
答案 2 :(得分:0)
与Q16版本相比,Q8版本使用一半的磁盘空间和时间来完成转换!此外,如果您要将图像分解为图块,则可以使用以下命令一步完成:
convert.exe" "WRL_15_1A.tif[2]" -crop 14409x15396 +repage
-scene 0 "temp\WRL_15_1A%d.tif"
答案 3 :(得分:0)
vips可以将金字塔形tiff直接转换为深层金字塔。它是免费的,非常快,不需要太多内存。
例如,我看到了:
$ vipsheader vips-pyr.tif
vips-pyr.tif: 18008x22764 uchar, 3 bands, srgb, tiffload
$ time vips dzsave vips-pyr.tif x.zip$ time vips dzsave vips-pyr.tif x.zip
real 0m9.763s
user 0m19.700s
sys 0m4.644s
peak memory: 180mb
在一台小型笔记本电脑上,在10秒内转换为20,000 x 20,000 tiff。它正在编写一个包含金字塔的zip文件,因此您可以立即上传到服务器。内存使用与图像宽度成比例,所以它会做非常大的图像---我经常处理250,000 x 250,000像素的幻灯片。
这里有一篇博客文章介绍dzsave:
http://libvips.blogspot.co.uk/2013/03/making-deepzoom-zoomify-and-google-maps.html