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输出控制功能在简繁体转换中的应用
Oct 09 PHP
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
Memcache 在PHP中的使用技巧
Feb 08 PHP
php运行出现Call to undefined function curl_init()的解决方法
Nov 02 PHP
PHP中使用CURL伪造来路抓取页面或文件
May 04 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
PHP链接MySQL的常用扩展函数
Oct 23 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
分享php分页的功能模块
Jun 16 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP设计模式之抽象工厂模式实例分析
Mar 25 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 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
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
js 字符串操作函数
2009/07/25 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
python网络编程之文件下载实例分析
2015/05/20 Python
python简单判断序列是否为空的方法
2015/06/30 Python
python 实时遍历日志文件
2016/04/12 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
Python何时应该使用Lambda函数
2019/07/02 Python
python pandas模块基础学习详解
2019/07/03 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
英国精品买手店:Browns Fashion
2016/09/29 全球购物
信息与计算科学专业推荐信
2014/02/23 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
2014年领班工作总结
2014/11/25 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
企业团队精神心得体会
2016/01/19 职场文书