php使用Imagick获取图片主色调

使用php+imagick扩展 来获取图片主色调

引子

做为一个野路子的程序员, 看到其他app上的一些功能点 总爱去试试

前两天在用快手的app, 发现视频列表展示的图片在还没加载出来的时候

不像通常做法放一个默认的背景图, 而是用了一个纯色背景

等图片加载出来时候 发现纯色背景跟图片颜色很接近

尝试

个人感觉像是使用了 图片主色调或者图片 点最多的颜色值

实现思路最开始是 遍历整幅图片(或者通过获取图片颜色直方图,然后遍历直方图), 将每个点颜色进行记录 然后进行获取颜色值最多的,或者平均值之类

但是发现一张图片运行下来需要很长时间

代码

经过尝试, php + imagick 有方法可以直接提取主色调, 记录

$image = new \Imagick($file);   //$file 图片存储地址或者url地址
$image->quantizeImage(1, \Imagick::COLORSPACE_RGB, 0, false, false);   //获取到只剩1个颜色值, 也可以多取几个
$image->uniqueImageColors();

$iter = $image->getPixelIterator(); 
$iter->resetIterator();
$row = $iter->getNextIteratorRow();
$color = $row[0]->getColor();   //获取到第一个颜色点的颜色

echo $color['r'];
echo $color['g'];
echo $color['b'];

简单的处理, 就可以得到 近似主观主色调的颜色了.

产品上使用的时候 可以通过调整颜色的饱和度或者亮度 来让颜色更利于展示

效果对比

扒取了快手的数据 效果对比:

对比图片

快手具体使用的什么方法就不知道了.

不过这个简单的方法可以用在一些简单的场景, 对于量级不是很大的地方完全ok

输出颜色名称

获取到颜色值 感觉还不够,主色到底是 红色,蓝色,黑色 还是神马的。得描述出来

颜色rgb来对应颜色名称, 0-255,0-255,0-255 有N多中组合

这里尝试 利用HSL值 来区分颜色名称 $hsl = $row[0]->getHSL();

根据HSL值区分颜色可以参考:http://www.360doc.com/content/12/0411/13/3764603_202744651.shtml

转载于:https://my.oschina.net/renzhenguo/blog/860964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值