php生成热点图----RGB颜色变化规律

PHP生成热点图,有两大要点:

1. 点需要有模糊效果。

2. 点越多,颜色需要越鲜艳。

借用http://www.labsmedia.com/clickheat/的算法,第一点比较好理解,第二点可以把RGB值和画图板里的颜色对比。

clickheat--version1:

<?php
define('CLICKHEAT_LOW_COLOR', 0); 
define('CLICKHEAT_HIGH_COLOR', 255);
define('CLICKHEAT_GREY_COLOR', 240);
define('CLICKHEAT_ALPHA', 60);
for ($i = 0; $i < 110; $i++)
{
	/** Red */
	if ($i < 10)
	{
		$red = CLICKHEAT_GREY_COLOR + (CLICKHEAT_LOW_COLOR - CLICKHEAT_GREY_COLOR) * $i / 10;
	}
	elseif ($i < 60)
	{
		$red = CLICKHEAT_LOW_COLOR;
	}
	elseif ($i < 85)
	{
		$red = CLICKHEAT_LOW_COLOR + (CLICKHEAT_HIGH_COLOR - CLICKHEAT_LOW_COLOR) * ($i - 60) / 35;
	}
	else
	{
		$red = CLICKHEAT_HIGH_COLOR;
	}
	/** Green */
	if ($i < 10)
	{
		$green = CLICKHEAT_GREY_COLOR + (CLICKHEAT_LOW_COLOR - CLICKHEAT_GREY_COLOR) * $i / 10;
	}
	elseif ($i < 35)
	{
		$green = CLICKHEAT_LOW_COLOR + (CLICKHEAT_HIGH_COLOR - CLICKHEAT_LOW_COLOR) * $i / 35;
	}
	elseif ($i < 85)
	{
		$green = CLICKHEAT_HIGH_COLOR;
	}
	else
	{
		$green = CLICKHEAT_HIGH_COLOR - (CLICKHEAT_HIGH_COLOR - CLICKHEAT_LOW_COLOR) * ($i - 85) / 35;
	}
	/** Blue */
	if ($i < 10)
	{
		$blue = CLICKHEAT_GREY_COLOR + (CLICKHEAT_HIGH_COLOR - CLICKHEAT_GREY_COLOR) * $i / 10;
	}
	elseif ($i < 35)
	{
		$blue = CLICKHEAT_HIGH_COLOR;
	}
	elseif ($i < 60)
	{
		$blue = CLICKHEAT_HIGH_COLOR - (CLICKHEAT_HIGH_COLOR - CLICKHEAT_LOW_COLOR) * ($i - 35) / 35;
	}
	else
	{
		$blue = CLICKHEAT_LOW_COLOR;
	}
	echo "R:".(int)$red.";&nbsp;&nbsp;&nbsp;&nbsp;G:".(int)$green.";&nbsp;&nbsp;&nbsp;&nbsp;B:".(int)$blue;
	echo "<br />";
}
?>

 clickheat--version18:

<?php
$colors = array(50, 70, 90, 110, 120);
$low = 0;
$high = 255;
$grey = 240;
for ($i = 0; $i < 128; $i++)
{
	/** Red */
	if ($i < $colors[0])
	{
		$R = $grey + ($low - $grey) * $i / $colors[0];
	}
	elseif ($i < $colors[2])
	{
		$R = $low;
	}
	elseif ($i < $colors[3])
	{
		$R = $low + ($high - $low) * ($i - $colors[2]) / ($colors[3] - $colors[2]);
	}
	else
	{
		$R = $high;
	}
	/** Green */
	if ($i < $colors[0])
	{
		$G = $grey + ($low - $grey) * $i / $colors[0];
	}
	elseif ($i < $colors[1])
	{
		$G = $low + ($high - $low) * ($i - $colors[0]) / ($colors[1] - $colors[0]);
	}
	elseif ($i < $colors[3])
	{
		$G = $high;
	}
	else
	{
		$G = $high - ($high - $low) * ($i - $colors[3]) / (127 - $colors[3]);
	}
	/** Blue */
	if ($i < $colors[0])
	{
		$B = $grey + ($high - $grey) * $i / $colors[0];
	}
	elseif ($i < $colors[1])
	{
		$B = $high;
	}
	elseif ($i < $colors[2])
	{
		$B = $high - ($high - $low) * ($i - $colors[1]) / ($colors[2] - $colors[1]);
	}
	else
	{
		$B = $low;
	}
	echo "R:".(int)$R.";&nbsp;&nbsp;&nbsp;&nbsp;G:".(int)$G.";&nbsp;&nbsp;&nbsp;&nbsp;B:".(int)$B;
	echo "<br />";
}
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值