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 checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
Jun 23 PHP
PHP函数import_request_variables()用法分析
Apr 02 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 PHP
php微信公众号开发之图片回复
Oct 20 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 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作的文本留言本的例子(六)
2006/10/09 PHP
PHP 和 XML: 使用expat函数(一)
2006/10/09 PHP
php中文字符截取防乱码
2008/03/28 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
php.ini 配置文件的深入解析
2013/06/17 PHP
调整PHP的性能
2013/10/30 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
PHP7 新增常量
2021/03/09 PHP
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
2018/10/09 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
技校教师求职简历的自我评价
2013/10/20 职场文书
财产公证书
2014/04/10 职场文书
2014年团支部工作总结
2014/11/17 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
思想政治表现评语
2015/01/04 职场文书
中国合伙人观后感
2015/06/02 职场文书
运动会1000米加油稿
2015/07/21 职场文书