PHP中十六进制颜色与RGB颜色值互转的方法


Posted in PHP onMarch 18, 2019

16进制的颜色值通常表示为#FFFFFF,当前也有缩减为#FFF,前提是两位两位必需相同,例如#FEFEFE这种,就不能进行缩减。而RGB的颜色格式是由3组0~255的数字构成,分别代表红(Red)、绿(Green)、蓝(Blue)的色值。

那么,将16进制转换为RGB色值,其实就是分别把#号后面的两位作为一个单位转换成十进制。

代码如下:

/** 
* 将16进制颜色转换为RGB
* author 3water.com
*/ 
function hex2rgb($hexColor){
 $color=str_replace('#','',$hexColor);
 if (strlen($color)> 3){
 $rgb=array(
  'r'=>hexdec(substr($color,0,2)),
  'g'=>hexdec(substr($color,2,2)),
  'b'=>hexdec(substr($color,4,2))
 );
 }else{
 $r=substr($color,0,1). substr($color,0,1);
 $g=substr($color,1,1). substr($color,1,1);
 $b=substr($color,2,1). substr($color,2,1);
 $rgb=array( 
  'r'=>hexdec($r),
  'g'=>hexdec($g),
  'b'=>hexdec($b)
 );
 }
 return $rgb;
}

另一种写法

/**
   * 十六进制转RGB
   * @param string $color 16进制颜色值
   * @return array
   */
  public static function hex2rgb($color) {
    $hexColor = str_replace('#', '', $color);
    $lens = strlen($hexColor);
    if ($lens != 3 && $lens != 6) {
      return false;
    }
    $newcolor = '';
    if ($lens == 3) {
      for ($i = 0; $i < $lens; $i++) {
        $newcolor .= $hexColor[$i] . $hexColor[$i];
      }
    } else {
      $newcolor = $hexColor;
    }
    $hex = str_split($newcolor, 2);
    $rgb = [];
    foreach ($hex as $key => $vls) {
      $rgb[] = hexdec($vls);
    }
    return $rgb;
  }

RGB颜色和十六进制颜色互转

/**
   * RGB转 十六进制
   * @param $rgb RGB颜色的字符串 如:rgb(255,255,255);
   * @return string 十六进制颜色值 如:#FFFFFF
   */
  function RGBToHex($rgb){
    $regexp = "/^rgb\(([0-9]{0,3})\,\s*([0-9]{0,3})\,\s*([0-9]{0,3})\)/";
    $re = preg_match($regexp, $rgb, $match);
    $re = array_shift($match);
    $hexColor = "#";
    $hex = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
    for ($i = 0; $i < 3; $i++) {
      $r = null;
      $c = $match[$i];
      $hexAr = array();
      while ($c > 16) {
        $r = $c % 16;
        $c = ($c / 16) >> 0;
        array_push($hexAr, $hex[$r]);
      }
      array_push($hexAr, $hex[$c]);
      $ret = array_reverse($hexAr);
      $item = implode('', $ret);
      $item = str_pad($item, 2, '0', STR_PAD_LEFT);
      $hexColor .= $item;
    }
    return $hexColor;
  }
  /**
   * 十六进制 转 RGB
   */
  function hex2rgb($hexColor) {
    $color = str_replace('#', '', $hexColor);
    if (strlen($color) > 3) {
      $rgb = array(
        'r' => hexdec(substr($color, 0, 2)),
        'g' => hexdec(substr($color, 2, 2)),
        'b' => hexdec(substr($color, 4, 2))
      );
    } else {
      $color = $hexColor;
      $r = substr($color, 0, 1) . substr($color, 0, 1);
      $g = substr($color, 1, 1) . substr($color, 1, 1);
      $b = substr($color, 2, 1) . substr($color, 2, 1);
      $rgb = array(
        'r' => hexdec($r),
        'g' => hexdec($g),
        'b' => hexdec($b)
      );
    }
    return $rgb;
  }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
PHPUnit PHP测试框架安装方法
Mar 23 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
php实现把数组按指定的个数分隔
Feb 17 PHP
php 魔术方法详解
Nov 11 PHP
php实现处理输入转义字符的代码
Nov 08 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 #PHP
PHP标准库(PHP SPL)详解
Mar 16 #PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 #PHP
php生成word并下载代码实例
Mar 15 #PHP
PHP-FPM的配置与优化讲解
Mar 15 #PHP
php-fpm中max_children的配置
Mar 15 #PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 #PHP
You might like
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
编写自己的php扩展函数
2006/10/09 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
浅谈php扩展imagick
2014/06/02 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
event.X和event.clientX的区别分析
2011/10/06 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
vue.js实现简单的计算器功能
2020/02/22 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
python动态进度条的实现代码
2019/07/03 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
英文自荐信格式
2013/11/28 职场文书
办公设备采购方案
2014/03/16 职场文书
董事长秘书工作职责
2014/06/10 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
学习退步检讨书
2014/09/28 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android