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

相关文章

来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

5198
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4355
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

38010
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2810
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2886
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3615
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.4K7
来自专栏落花落雨不落叶

canvas画简单电路图

81211
来自专栏魂祭心

原 canvas绘制clock

4994
来自专栏菩提树下的杨过

Flash/Flex学习笔记(23):运动学原理

先写一个公用的小球类Ball: package{ import flash.display.Sprite; //小球 类 public class B...

27110

扫码关注云+社区