PHP中取图片色系并生成跟图片反色差的字体

V站笔记

原取图片色系:

function imgColor($imgUrl){	$imageInfo = getimagesize($imgUrl);	$imgType   = strtolower(substr(image_type_to_extension($imageInfo[2]), 1));	$imageFun  = 'imagecreatefrom' . ($imgType == 'jpg' ? 'jpeg' : $imgType);	$i         = $imageFun($imgUrl);	$rColorNum = $gColorNum = $bColorNum = $total = 0;	for ($x = 0; $x < imagesx($i); $x++) {		for ($y = 0; $y < imagesy($i); $y++) {			$rgb = imagecolorat($i, $x, $y);			$r   = ($rgb >> 16) & 0xFF;			$g   = ($rgb >> 8) & 0xFF;			$b   = $rgb & 0xFF;			$rColorNum += $r;			$gColorNum += $g;			$bColorNum += $b;			$total++;		}	}	$rgb      = array();	$rgb['r'] = round($rColorNum / $total);	$rgb['g'] = round($gColorNum / $total);	$rgb['b'] = round($bColorNum / $total);	return $rgb;} $rgb = imgColor("图片地址");print_r($rgb); //将打印出一个数组

根据函数我们可以理解到,此函数运行时会依次遍历所有的像素点。然后取出现最多的像素点。

由此产生了一个问题。如果遇到这种图片:

就会发现取出了 255,255,255的全白色。

于是:我们改进一下函数:

function imgColor($imgUrl){	$imageInfo = getimagesize($imgUrl);	$imgType   = strtolower(substr(image_type_to_extension($imageInfo[2]), 1));	$imageFun  = 'imagecreatefrom' . ($imgType == 'jpg' ? 'jpeg' : $imgType);	$i         = $imageFun($imgUrl);	$rColorNum = $gColorNum = $bColorNum = $total = 0;	for ($x = 50; $x < imagesx($i) - 50; $x++) {		for ($y = 50; $y < imagesy($i) - 50; $y++) {			$rgb = imagecolorat($i, $x, $y);			$r   = ($rgb >> 16) & 0xFF;			$g   = ($rgb >> 8) & 0xFF;			$b   = $rgb & 0xFF;			$rColorNum += $r;			$gColorNum += $g;			$bColorNum += $b;			$total++;		}	}	$rgb      = array();	$rgb['r'] = round($rColorNum / $total);	$rgb['g'] = round($gColorNum / $total);	$rgb['b'] = round($bColorNum / $total);	return $rgb;}$rgb = imgColor("图片地址");print_r($rgb); //将打印出一个数组  /*** x=50 * imagesx($i) - 50* y=50* imagesy($i) - 50* 相当于 margin 属性 **/

我们发现取色正常了。如果不是很正常依然可以调大数值。

根据图片色系来生成一个对应的字体:

$gray      = '255,255,255';$grayLevel = $img['r'] * 0.299 + $img['g'] * 0.587 + $img['b'] * 0.114;if ($grayLevel >= 150) {	$gray = '0,0,0';}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS技术

iOS 无侵入实现段落样式控制(解决富文本单行显示中文问题)

在iOS开发中,文本格式(富文本)处理是一个比较麻烦的问题(我们姑且说它是麻烦的)。这里我提两点比较蛋疼的地方:

2654
来自专栏前端侠2.0

oracle 两表关联时,年月条件的写法引起的巨大性能的差异

需求是要比较最近两个月的值,进行数据检验!所以我用自关联,来将两个月的数据放到一行上,然后进行比较!

822
来自专栏从零开始学自动化测试

appium+python自动化26-模拟手势点击坐标(tap)

前言: 有时候定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问) 那就拿出绝招:点元素所在位置的坐标 一、 tap用法 1.tap是...

3324
来自专栏Jerry的SAP技术分享

如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity

代码的环复杂度(Cyclomatic complexity,有的地方又翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe...

3419
来自专栏企鹅号快讯

新手不知道的,前端关于html5入门学习顺序

现在html5移动端非常的火,很多小伙伴想学习又不知道从哪开端学起,今天就分享一下前html5该怎么入门。 ? 首先还是给大家推荐一个学习氛围很好的裙,我自己的...

3776
来自专栏数据小魔方

带涨跌箭头的柱形图

今天要跟大家分享的图表是带涨跌箭头的柱形图! 在簇状柱形图的两个数据条标签上,带上表示涨跌符号的箭头,可以清晰的展现出数据的实际涨跌趋势。 首首先还是来看一下我...

2704
来自专栏贺贺的前端工程师之路

前端公众号-各种事宜-不能发布

切记 使用【】、| 这类的符号,是为了突显一些账号的栏目内容;但我们经常也会看到不少账号在标题里加了许多奇怪的符号,或者emoji表情,此时再谈文章的逼格就太...

643
来自专栏一名叫大蕉的程序员

大数据计数原理1+0=1这你都不会算(二)No.50

上一次我们说完了用 HashSet 来进行计数了。我们可以发现,如果我们估计有N个数,那么我们至少需要N*32bit(按照int在32位操作系统下占用32个bi...

1888
来自专栏数据分析

char varchar nchar nvarcharar到底有多大区别

首先说明下,ASP.NET MVC系列还在龟速翻译中。 工作好多年,基础知识甚是薄弱,决定以后在coding(cv操作)的时候尽量多google下,然后总结下来...

2706
来自专栏源码之家

图片类杂志域下载思路

1013

扫码关注云+社区