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 相关文章推荐
我的论坛源代码(九)
Oct 09 PHP
PHP 彩色文字实现代码
Jun 29 PHP
php时间戳转换的示例
Mar 31 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
php统计数组不同元素的个数的实例方法
Sep 26 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 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
DC动漫人物排行
2020/03/03 欧美动漫
用PHP实现维护文件代码
2007/06/14 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
python使用递归解决全排列数字示例
2014/02/11 Python
python检测远程端口是否打开的方法
2015/03/14 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
python和shell获取文本内容的方法
2018/06/05 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
Django 路由层URLconf的实现
2019/12/30 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
django跳转页面传参的实现
2020/09/17 Python
python 实现客户端与服务端的通信
2020/12/23 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
.net C#面试题
2012/08/28 面试题
客房主管岗位职责
2013/12/09 职场文书
《阳光》教学反思
2014/02/23 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
2016党员党课心得体会
2016/01/07 职场文书
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏
python pygame 开发五子棋双人对弈
2022/05/02 Python