在应用中,大约有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:
样本输出
0.423529,0.996078,0:image1.png
0.0262457,0,0:image2.png
然后你可以非常快地与 并行执行此操作。 GNU 并行 ,使用类似
find . -name \*.png -print0 | parallel -0 convert {} -format "%[fx:mean.r],%[fx:mean.g],%[fx:mean.b]:%f\n" info:
然后您可以制作最终图像并将单个像素放入。
即使扫描 1,000,000 个 PNG 文件也可能需要很多小时......
你没有说你的图像有多大,但如果它们每个大约 1MB,并且你有 1,000,000,000,那么你需要做 1 PB 的 I/O 来读取它们,所以即使有 500MB/s 的超快速 SSD,您将在那里待 23 天。
关于image - 如何为 10 亿张 png 图像生成统一缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42220502/