identify 命令输出中的颜色图和直方图有什么区别?

What is the differrence between colormap and historam in the identify command output?

我在下面的表格中使用识别命令:

identify -verbose image.png

部分输出为:

  Colors: 8
  Histogram:
     49602: ( 49, 51, 39) #313327 srgb(49,51,39)
     36492: ( 98,121,135) #627987 srgb(98,121,135)
     21728: ( 98,182,240) #62B6F0 srgb(98,182,240)
     39526: (121,131, 75) #79834B srgb(121,131,75)
     34298: (165,171,147) #A5AB93 srgb(165,171,147)
     29957: (185,200,226) #B9C8E2 srgb(185,200,226)
     18767: (210,185, 67) #D2B943 srgb(210,185,67)
     31774: (246, 69, 44) #F6452C srgb(246,69,44)
  Colormap entries: 9
  Colormap:
         0: (121,131, 75) #79834B srgb(121,131,75)
         1: ( 49, 51, 39) #313327 srgb(49,51,39)
         2: (210,185, 67) #D2B943 srgb(210,185,67)
         3: (165,171,147) #A5AB93 srgb(165,171,147)
         4: (185,200,226) #B9C8E2 srgb(185,200,226)
         5: ( 98,121,135) #627987 srgb(98,121,135)
         6: ( 98,182,240) #62B6F0 srgb(98,182,240)
         7: (246, 69, 44) #F6452C srgb(246,69,44)
         8: (255,255,255) #FFFFFF white

我看到与直方图中相同的颜色加白色,但以不同的顺序出现在颜色图中。

两者有什么区别?

Histogram下第一行:

49602: ( 49, 51, 39) #313327 srgb(49,51,39)

告诉您图像中有 49,602 个像素,颜色为 sRGB(49,51,39)。所以它告诉你出现的频率,或者每种颜色出现的频率。


Colormap:下的9行是图像的调色板

我们来看第一行:

0: (121,131, 75) #79834B srgb(121,131,75)

这意味着图像中出现颜色 srgb(121,131,75) 的任何位置,我们只在该位置存储调色板索引 0,而不存储颜色 121,131,75。也就是说我们只用1个字节来存储一个0而不是存储3个字节的RGB,也就是说我们节省了space的2/3。它是一个 "LookUp Table" 调色板

调色板以 space 换取颜色准确性。一般来说,它们是原始图像大小的 1/3,但通常只能存储 256 种独特的颜色,而不是传统 RGB 图像的 16,777,216 种颜色。

为了好玩,让我们创建这个平滑的灰度渐变和一些随机噪声作为传统的 RGB888 图像(输出为 75kB):

magick -size 40x600 gradient: \( xc: +noise random \) +append -rotate 90 PNG24:a.png

现在做同样的事情,但需要 ImageMagick 创建调色板图像(输出为 25kB):

magick -size 40x600 gradient: \( xc: +noise random \) +append -rotate 90 PNG8:a.png

有更长的示例解释