image - 如何为 10 亿张 png 图像生成统一缩略图?

标签 image image-processing imagemagick png graphic

在应用中,大约有10亿张png图片(大小为1024*1024,每张大约1MB),需要将这10亿张图片组合成一个巨大的图片,然后生成一个大小为1024*1024 的图片。统一缩略图为了它。或者也许我们不需要真正将图像组合成一个巨大的图像,而只需执行一些神奇的算法来在计算机内存中生成单一的缩略图?同时,这个过程需要尽快完成,最好在几秒钟内完成,或者至少在几分钟内完成。有没有人有想法?

enter image description here

最佳答案

将十亿张图像加载到单个图像中的想法 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/

相关文章:

c++ - 如何正确使用opencv在图像上使用傅里叶变换对?

c# - 如何检测二值图像RGB中的圆?

php - ImageMagick 和 imagick_type_gen 无法识别添加的字体

windows - 如何使用 ruby​​ 1.9.3 在 Windows XP 中安装 rmagick

php - 尝试在 php 中调整图像大小时如何处理此内存泄漏?

javascript - 选中复选框,自动更新复选框

iphone - 实时图像处理 (OCR)

imagemagick 将大 pdf 分割成 png

javascript - CSS 中不规则多边形的悬停效果

python验证码解码器库