计算附加图像时ImageMagick convert的主要内存消耗
Calculate the main memory consumption of ImageMagick convert when appending images
我使用 ImageMagick convert
工具附加了几张 PNG 图片。
convert -set colorspace RGB `ls *.png` -append outout.png
这是输入文件的颜色参数:
$ identify input1.png
input1.png PNG 9600x1800 9600x7200+0+0 8-bit sRGB 355KB 0.000u 0:00.000
存在 4 个具有相同参数的输入文件。
输出文件具有这些颜色参数:
$ identify output.png
output.png PNG 9600x7200 9600x28800+0+0 8-bit sRGB 2.461MB 0.000u 0:00.009
这是我使用的 ImageMagick 版本:
$ convert -version
Version: ImageMagick 6.7.7-10 2014-04-09 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP
如何计算convert ... -append
操作的主内存消耗?
看来您使用的是 Q16 版本的 ImageMagick,此版本的 ImageMagick 使用每像素通道 16 位(Q8 版本使用每像素 8 位)。在 ImageMagick 6 中,每个像素都有 4-5 个通道(红色、绿色、蓝色、不透明度、索引),这种行为将在 ImageMagick 7 中改变 (http://www.imagemagick.org/script/porting.php#channels)。由于您的输入和输出都是一个 png 文件,您每个像素使用 4 个通道,因此总计为每个像素 16*4 = 64 位。因为您的输入图像是 9600x1800 并且您将其中的 4 个组合成一个图像,所以您总共需要 64*9600*1800*4 = 4423680000 位/552.96 MB 来分配内存中的图像。但是由于在创建输出图像时会创建每个图像的副本,因此您将需要两倍的内存:1.1 GB。
我使用 ImageMagick convert
工具附加了几张 PNG 图片。
convert -set colorspace RGB `ls *.png` -append outout.png
这是输入文件的颜色参数:
$ identify input1.png
input1.png PNG 9600x1800 9600x7200+0+0 8-bit sRGB 355KB 0.000u 0:00.000
存在 4 个具有相同参数的输入文件。
输出文件具有这些颜色参数:
$ identify output.png
output.png PNG 9600x7200 9600x28800+0+0 8-bit sRGB 2.461MB 0.000u 0:00.009
这是我使用的 ImageMagick 版本:
$ convert -version
Version: ImageMagick 6.7.7-10 2014-04-09 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP
如何计算convert ... -append
操作的主内存消耗?
看来您使用的是 Q16 版本的 ImageMagick,此版本的 ImageMagick 使用每像素通道 16 位(Q8 版本使用每像素 8 位)。在 ImageMagick 6 中,每个像素都有 4-5 个通道(红色、绿色、蓝色、不透明度、索引),这种行为将在 ImageMagick 7 中改变 (http://www.imagemagick.org/script/porting.php#channels)。由于您的输入和输出都是一个 png 文件,您每个像素使用 4 个通道,因此总计为每个像素 16*4 = 64 位。因为您的输入图像是 9600x1800 并且您将其中的 4 个组合成一个图像,所以您总共需要 64*9600*1800*4 = 4423680000 位/552.96 MB 来分配内存中的图像。但是由于在创建输出图像时会创建每个图像的副本,因此您将需要两倍的内存:1.1 GB。