如何使用 Imagemagick 中的 mogrify 命令获取多张图片的颜色信息?
How can I use the mogrify command in Imagemagick to get color information of many images?
我正在尝试获取许多图像的颜色信息并使用 Imagemagick 将其导出(最好是单个 txt 文件)。我专门寻找每种颜色的像素数。对于单个图像,我使用:
convert image.png -format %c histogram:info:result.txt
这给了我我需要的东西。包含以下内容的文本文件:
38775: ( 0,255, 0) #00FF00 lime
523: (255, 0, 0) #FF0000 red
11756: (255,255, 0) #FFFF00 yellow
236946: (255,255,255) #FFFFFF white
我一直在尝试使用 mogrify
对所有图像执行此操作,但没有成功。正如我提到的,理想情况下我会在一个文件中获取所有信息,但每个包含信息的单独文件也很好。
我不知道你想做什么,或者有什么意义,我也不明白你为什么如此热衷于使用 mogrify
来实现它...但我可以创建一些图片并告诉您图片中的内容:
convert -size 10x10 xc:blue blue.png
convert -size 10x10 xc:red red.png
convert -size 50x50 gradient:yellow-cyan -colors 8 mad.png
所以,我们在这里:
convert red.png blue.png mad.png -depth 8 -format "%c" histogram:info:
100: (255, 0, 0) #FF0000 red
100: ( 0, 0,255) #0000FF blue
606: ( 33,255,222) #21FFDE srgb(33,255,222)
613: ( 94,255,161) #5EFFA1 srgb(94,255,161)
1: (128,255,128) #80FF80 srgb(128,255,128)
641: (161,255, 94) #A1FF5E srgb(161,255,94)
639: (224,255, 31) #E0FF1F srgb(224,255,31)
或者,也使用文件名:
convert red.png blue.png mad.png -format "%f:%c" histogram:info:
red.png: 100: (255, 0, 0) #FF0000 red
blue.png: 100: ( 0, 0,255) #0000FF blue
mad.png: 606: ( 8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%)
613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%)
1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%)
641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%)
639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%)
或在每个部分的开头加上文件名:
convert red.png blue.png mad.png -format "%f\n%c" histogram:info:
red.png
1: (255, 0, 0) #FF0000 red
blue.png
1: (255, 0, 0) #FF0000 red
mad.png
606: ( 8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%)
613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%)
1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%)
641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%)
639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%)
或者你的意思是:
for f in *.png; do echo $f; convert "$f" -format %c histogram:info: ;done > result.txt
result.txt
blue.png
1: (255, 0, 0) #FF0000 red
mad.png
606: ( 8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%)
613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%)
1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%)
641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%)
639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%)
red.png
1: (255, 0, 0) #FF0000 red
您打算如何处理这些结果 - 我想有一种简单的方法可以实现它...
我正在尝试获取许多图像的颜色信息并使用 Imagemagick 将其导出(最好是单个 txt 文件)。我专门寻找每种颜色的像素数。对于单个图像,我使用:
convert image.png -format %c histogram:info:result.txt
这给了我我需要的东西。包含以下内容的文本文件:
38775: ( 0,255, 0) #00FF00 lime
523: (255, 0, 0) #FF0000 red
11756: (255,255, 0) #FFFF00 yellow
236946: (255,255,255) #FFFFFF white
我一直在尝试使用 mogrify
对所有图像执行此操作,但没有成功。正如我提到的,理想情况下我会在一个文件中获取所有信息,但每个包含信息的单独文件也很好。
我不知道你想做什么,或者有什么意义,我也不明白你为什么如此热衷于使用 mogrify
来实现它...但我可以创建一些图片并告诉您图片中的内容:
convert -size 10x10 xc:blue blue.png
convert -size 10x10 xc:red red.png
convert -size 50x50 gradient:yellow-cyan -colors 8 mad.png
所以,我们在这里:
convert red.png blue.png mad.png -depth 8 -format "%c" histogram:info:
100: (255, 0, 0) #FF0000 red
100: ( 0, 0,255) #0000FF blue
606: ( 33,255,222) #21FFDE srgb(33,255,222)
613: ( 94,255,161) #5EFFA1 srgb(94,255,161)
1: (128,255,128) #80FF80 srgb(128,255,128)
641: (161,255, 94) #A1FF5E srgb(161,255,94)
639: (224,255, 31) #E0FF1F srgb(224,255,31)
或者,也使用文件名:
convert red.png blue.png mad.png -format "%f:%c" histogram:info:
red.png: 100: (255, 0, 0) #FF0000 red
blue.png: 100: ( 0, 0,255) #0000FF blue
mad.png: 606: ( 8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%)
613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%)
1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%)
641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%)
639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%)
或在每个部分的开头加上文件名:
convert red.png blue.png mad.png -format "%f\n%c" histogram:info:
red.png
1: (255, 0, 0) #FF0000 red
blue.png
1: (255, 0, 0) #FF0000 red
mad.png
606: ( 8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%)
613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%)
1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%)
641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%)
639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%)
或者你的意思是:
for f in *.png; do echo $f; convert "$f" -format %c histogram:info: ;done > result.txt
result.txt
blue.png
1: (255, 0, 0) #FF0000 red
mad.png
606: ( 8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%)
613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%)
1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%)
641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%)
639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%)
red.png
1: (255, 0, 0) #FF0000 red
您打算如何处理这些结果 - 我想有一种简单的方法可以实现它...