文档章节

php使用Imagick获取图片主色调

FrogFun
 FrogFun
发布于 2017/03/16 20:39
字数 649
阅读 177
收藏 0
PHP

使用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

© 著作权归作者所有

FrogFun
粉丝 2
博文 6
码字总数 2717
作品 0
昌平
程序员
私信 提问
ImageMagick 图片处理 函数说明和使用举例

ImageMagick 函数说明和使用举例,作者:打打 QQ:1069576404 首先,加载phpimagick.dll扩展模块,也就是在网上找到phpimagick.dll文件,把它放在php.ini同级的目录中,然后,在php.ini里加上...

云栖希望。
2017/12/04
0
0
PHP利用imagick把PDF转成PNG

需求:通过PHP把PDF生成PNG图片,一般用在在线阅读浏览用的。 Windows下实现: 1.PHP的DLL扩展下载地址:http://valokuva.org/outside-blog-content/imagick-windows-builds/ 2.里面有用于P...

野草
2013/08/12
2.2K
0
php获取图片RGB颜色值的例子

php获取图片RGB颜色值的例子 很多图片站点都会根据用户上传的图片检索出图片的主要颜色值,然后在通过颜色搜索相关的图片。 之前按照网上的方法将图片缩放(或者马赛克)然后遍历每个像素点,然...

mysoftsky
2014/07/29
236
0
Linux下php安装imagick

说明: php安装目录:/usr/local/php5 php.ini配置文件路径:/usr/local/php5/etc/php.ini Nginx安装目录:/usr/local/nginx Nginx网站根目录:/usr/local/nginx/html 1、安装编译工具 yum ...

jims
2016/10/01
21
0
imagemagick, imagick和magickwand的安装

imagemagick是一个开源的强大的适用于图形图像开发制作的软件套件,与GD库同等级别的,甚至有些功能是GD所没有的,比如创建动态的gif图 片。它基于命令行操作的,但同时为大量的其它编程语言...

mickelfeng
2012/12/01
212
0

没有更多内容

加载失败,请刷新页面

加载更多

新架构、新角色:TiDB Community Upgrade!

作者:Jian Zhang 经过几年的发展,TiDB 社区已经逐渐成熟,但是随着社区的发展壮大,我们逐渐感受到了现在社区架构上的一些不足。经过一系列的思考和总结,我们决定升级和调整目前社区组织架...

TiDB
24分钟前
5
0
jquery qrcode库提示not function

jquery qrcode 这个库能用,但是必须在初始化的时候,官方给的使用方法是 引入qrcode的库文件后,在js中写以下 html <div id="qrcode"></div> js jQuery('#qrcode').qrcode({ render: ......

shikamaru
28分钟前
9
0
MySQL数据库去重的简单方案

利用 distinct 对需要处理的字段进行去重 select distinct 字段名 from 表名 利用group by select * from 表名 group by 字段名 利用having select * from 表名 group by 字段名 having 字段...

FeanLau
30分钟前
9
0
字符串转换成整数

实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该...

蔚蓝_晴天
42分钟前
8
0
Eureka客户端续约及服务端过期租约清理源码解析

在之前的文章:EurekaClient自动装配及启动流程解析中,我们提到了在构造DiscoveryClient时除了包含注册流程之外,还调度了一个心跳线程: scheduler.schedule( new Ti...

Java学习录
53分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部