Sug*_*uge 8 png image imagemagick image-processing graphic
在应用程序中,大约有10亿个png图像(大小为1024*1024,每个大约1MB),它需要将10亿个图像组合成一个巨大的图像,然后为它生成一个1024×1024大小的缩略图.或者我们可能不需要真正将图像组合成一个巨大的图像,但只是做一些神奇的算法来在计算机内存中生成单一的缩略图?同时,这个过程需要尽可能快地完成,在几秒钟内或者至少在几分钟内完成.有没有人有想法?
将十亿个图像加载到一个montage进程中的想法是荒谬的.您的问题尚不清楚,但您的方法应该是确定每张原始图像在最终图像中的比例,然后平行从每张图像中提取必要数量的像素.然后将这些像素组合成最终图像.
因此,如果每个图像将由最终图像中的一个像素表示,则需要获得每个图像的平均值,您可以这样做:
convert image1.png image2.png ... -format "%[fx:mean.r],%[fx:mean.g],%[fx:mean.b]:%f\n" info:
Run Code Online (Sandbox Code Playgroud)
样本输出
0.423529,0.996078,0:image1.png
0.0262457,0,0:image2.png
Run Code Online (Sandbox Code Playgroud)
你可以使用类似的东西,与GNU Parallel并行地快速完成
find . -name \*.png -print0 | parallel -0 convert {} -format "%[fx:mean.r],%[fx:mean.g],%[fx:mean.b]:%f\n" info:
Run Code Online (Sandbox Code Playgroud)
然后,您可以制作最终图像并将各个像素放入其中.
扫描1,000,000个PNG文件可能需要很长时间......
你没有说你的图像有多大,但是如果你的图像大小为1MB,而你有1,000,000,000,那么你需要做一个PB级的I/O来读取它们,所以即使是500MB/s的超级快速SSD,你将在那里呆23天.