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 Token(令牌)设计
Mar 15 PHP
简化php模板页面中分页代码的解析
Feb 06 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
PHP函数in_array()使用详解
Aug 20 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
PHP7多线程搭建教程
Apr 21 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
如何在centos8自定义目录安装php7.3
Nov 28 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
python网络编程之数据传输UDP实例分析
2015/05/20 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
简单了解python关系(比较)运算符
2019/07/08 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
Python识别html主要文本框过程解析
2020/02/18 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
python中rb含义理解
2020/06/18 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
银行贷款委托书范本
2014/10/11 职场文书
六查六看心得体会
2014/10/14 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
社区元宵节活动总结
2015/02/06 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
2015年中秋节主持词
2015/07/30 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
MySQL如何构建数据表索引
2021/05/13 MySQL