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 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
关于php正则匹配汉字的方法介绍
Apr 25 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
PHP中使用CURL模拟登录并获取数据实例
Jul 01 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
PHP中实现crontab代码分享
Mar 26 PHP
PHP执行SQL文件并将SQL文件导入到数据库
Sep 17 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
Apr 02 PHP
php项目开发中用到的快速排序算法分析
Jun 25 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
PDO::errorCode讲解
Jan 28 PHP
一文搞懂php的垃圾回收机制
Jun 18 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读取文件并可支持远程文件的代码分享
2012/10/03 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
利用python库在局域网内传输文件的方法
2018/06/04 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
python生成并处理uuid的实现方式
2020/03/03 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
如何在python中判断变量的类型
2020/07/29 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
cf战队收人广告词
2014/03/14 职场文书
员工担保书范本
2015/09/22 职场文书
pandas中pd.groupby()的用法详解
2022/06/16 Python