ImageMagick:用identify得到图片的平均颜色(基本颜色/主色调)

Posted architectforest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageMagick:用identify得到图片的平均颜色(基本颜色/主色调)相关的知识,希望对你有一定的参考价值。

一,平均颜色的用途:

很多app在流式的展示图片时,

在图片没加载出来之前,

不是使用统一的背景图,

而是先显示一个纯色的背景,

而背景色和图片的颜色非常接近,

这样给用户的体验会更好。

我们这里演示的就是获取这个平均颜色值

 

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

         对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

 

二,查看identify的版本和帮助

1,查看版本

[root@blog im5]# identify -version
Version: ImageMagick 6.9.10-86 Q16 x86_64 2020-01-13 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5)
Delegates (built-in): bzlib cairo fftw fontconfig freetype gslib gvc jbig jng jp2 jpeg lcms ltdl lzma 
openexr pangocairo png ps raqm raw rsvg tiff webp wmf x xml zlib

 

2,查看帮助

[root@blog im5]# identify -help

 

3,查看手册

[root@blog im5]# man identify

 

三,identify得到平均颜色值的例子:

使用identify得到图片的平均颜色值

[root@blog im5]# identify -verbose 5.jpg
Image: 5.jpg
  ...
  Channel statistics:
    Pixels: 465018
    Red:
      min: 0  (0)
      max: 255 (1)
      mean: 173.125 (0.678923)
      standard deviation: 95.3528 (0.373932)
      kurtosis: -0.995196
      skewness: -0.895732
      entropy: 0.858608
    Green:
      min: 0  (0)
      max: 255 (1)
      mean: 98.2824 (0.385421)
      standard deviation: 56.5396 (0.221724)
      kurtosis: 0.427876
      skewness: 0.923531
      entropy: 0.947875
    Blue:
      min: 0  (0)
      max: 255 (1)
      mean: 124.452 (0.488046)
      standard deviation: 57.3031 (0.224718)
      kurtosis: -0.463398
      skewness: 0.318713
      entropy: 0.967108
  Image statistics:
    Overall:
      min: 0  (0)
      max: 255 (1)
      mean: 131.953 (0.517463)
      standard deviation: 69.7318 (0.273458)
      kurtosis: -1.27908
      skewness: 0.143493
      entropy: 0.92453
  Rendering intent: Perceptual
  ...
  Version: ImageMagick 6.9.10-86 Q16 x86_64 2020-01-13 https://imagemagick.org 

说明:Channel statistics: 下面的

Red:的mean值

Green:的mean值

Blue:的mean值

就是我们需要的三个值

 

我们用shell把这个三个值取出来:

[root@blog im5]$ identify -verbose 5.jpg | grep mean | head -3 | awk {match($0," ");print $2} | awk {printf("%.0f
",$1)}
173
98
124

三个值分别是r/g/b 三种颜色

 

也可以横向打印出来

[root@blog im5]$  identify -verbose 5.jpg | grep mean | head -3 | awk {match($0," ");print $2} | awk {printf("%.0f,",$1)} | head -c-1

173,98,124

 

四,identify的其他例子:

 得到图片的宽高

[root@blog im5]$ identify -format %wx%h 5.jpg
799x582

 

-format可打印的变量:

     %b   file size
     %c   comment
     %d   directory
     %e   filename extension
     %f   filename
     %h   height
     %i   input filename
     %k   number of unique colors
     %l   label
     %m   magick
     %n   number of scenes
     %o   output filename
     %p   page number
     %q   quantum depth
     %s   scene number
     %t   top of filename
     %u   unique temporary filename
     %w   width
     %x   x resolution
     %y   y resolution
     %#   signature
     
   newline 

 

附:format的官方文档地址:

https://www.imagemagick.org/script/escape.php

 

五,使用缩放图片的方法得到图片的平均颜色值

#-resize: 调整文件大小,这里是把文件转为1个像素大小

#!:表示不管原图片比例,强制缩放后的图片大小是1×1

#format:指定输出的信息,这里的r/g/b是三原色的值

#info -: Specify ‘file‘ as ‘-‘ for standard input or output.

#不指定文件而是使用-,用来指定标准输入或标准输出

[root@blog im5]$ convert 5.jpg -resize 1x1! -format "%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)]" info:-
173,98,125

这个计算和identify得到的结果基本一致

 

六,取平均颜色值的效果展示

1,原图:

技术图片

得到平均颜色值: 

[root@blog im5]$  identify -verbose 5.jpg | grep mean | head -3 | awk {match($0," ");print $2} | awk {printf("%.0f,",$1)} | head -c-1
173,98,124

效果:

技术图片

2,原图

技术图片 

得到平均颜色值:

[root@blog im4]$  identify -verbose blue.jpg | grep mean | head -3 | awk {match($0," ");print $2} | awk {printf("%.0f,",$1)} | head -c-1
55,128,225

效果:

技术图片

 

3,原图:

技术图片

得到平均色值:

[root@blog im5]$  identify -verbose 4.jpg | grep mean | head -3 | awk {match($0," ");print $2} | awk {printf("%.0f,",$1)} | head -c-1
26,75,22

效果:

技术图片

  

以上是关于ImageMagick:用identify得到图片的平均颜色(基本颜色/主色调)的主要内容,如果未能解决你的问题,请参考以下文章

图片的缩放处理

ImageMagick:如何确定jpeg文件的方向?

linux系统下查看图片尺寸的命令

Imagemagick ftp 和空间

PHP 或 Imagemagick :图像中主要颜色的数量

用php和imagemagick来处理图片文件的上传和缩放处理