PHP调整图片饱和度,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'];

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

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

效果对比

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

0818b9ca8b590ca3270a3433284dd417.png

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

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

输出颜色名称

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值