我想删除大量图像中的重复项。因为我有不同分辨率的同一张图片的副本,所以我会自己删除。但我想在线性时间内做到这一点。所以我认为通过用一个小脚本用平均颜色前缀重命名图像来对图像进行排序是明智的。问题是我不知道有什么软件能够在 CLI 中计算平均颜色。有没有?
答案1
最后我玩了一会,找到了ImageMagick软件包。这很棒,因为它让我可以在控制台中用一行代码完成此操作,而无需脚本。
for i in ./*; do mv "$i" "$(convert "$i" -scale 1x1\! -format '%[pixel:s]' info:- | cut -db -f2-)${i#./}" ;done
它只是循环遍历文件夹(前提:它只包含图像!),通过从convert "$i" -scale 1x1\! -format '%[pixel:s]' info:-
输出中提取相关部分来获取平均颜色cut -db -f2-
,最后重命名文件。可怕的是它的效果如何。
问候
答案2
如果我正确理解你的问题,你可以这样做:
wget -qO- 'https://www.gravatar.com/avatar/22e8a29fced165b37995aa5e05e6449b?s=32&d=identicon&r=PG' |
anytopnm |
tail -n +4 |
perl -ne 'BEGIN{$/=\3}
($r,$g,$b)=unpack"C3";$ar+=$r;$ag+=$g;$ab+=$b
END{printf "#%02x%02x%02x\n", $ar/$.,$ag/$.,$ab/$.}'
您的头像 ( ) 给出:(#c350c2
在撰写本文时有一些浅洋红色)。
假设anytopnm
总是返回PNM
inP6
格式。在某些情况下,例如图像为灰度时,可能不会出现这种情况,在这种情况下,convert - ppm:-
使用 ImageMagick 可能更安全。