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 条评论
登录 后参与评论

相关文章

来自专栏debugeeker的专栏

用xerces-c来进行xml schema校验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

881
来自专栏十月梦想

JS转义字符

3354
来自专栏前端说吧

vue-学习笔记(更新中...)

8316
来自专栏偏前端工程师的驿站

JS魔法堂:追忆那些原始的选择器

一、前言                                                                            ...

2347
来自专栏dotnet & java

jQuery.prop , jQuery.attr ,jQuery.data

jquery.prop 获取匹配的元素中第一个元素特定的属性值,或者是设置多个元素的属性值。

832
来自专栏Golang语言社区

golang 函数定义及其接口实例

/有返回值 且返回一个 func max(a int, b int) int { if a > b { return a } ...

2685
来自专栏向治洪

React 之props属性

React 里有一个非常常用的模式就是对组件做一层抽象。组件对外公开一个简单的属性(Props)来实现功能,但内部细节可能有非常复杂的实现。 可以使用 JSX ...

2115
来自专栏Golang语言社区

转--每周一个GoLang设计模式之组合模式

GoF在第二章通过设计一个Lexi的文档编辑器来介绍设计模式的使用,GoF认为Lexi设计面临七个问题: 1. **文档结构**2. **格式化**3. **修...

3166
来自专栏偏前端工程师的驿站

JS魔法堂:属性、特性,傻傻分不清楚

一、前言                                   或许你和我一样都曾经被下面的代码所困扰 var el = document.get...

2407
来自专栏LanceToBigData

Jsoup(一)Jsoup详解(官方)

一、Jsoup概述 1.1、简介     jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API...

9865

扫码关注云+社区