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注释实例技巧
Oct 03 PHP
Php图像处理类代码分享
Jan 19 PHP
php实现telnet功能示例
Apr 08 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
PHP实现的方程求解示例分析
Nov 11 PHP
php中strtotime函数性能分析
Nov 20 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
使用apache模块rewrite_module (转)
2007/02/14 PHP
php构造函数与析构函数
2016/04/23 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python处理json数据中的中文
2014/03/06 Python
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
python如何读取bin文件并下发串口
2019/07/05 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
文职个人求职信范文
2013/09/23 职场文书
专升本自我鉴定
2013/10/10 职场文书
高中历史教学反思
2014/02/08 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
开平碉楼导游词
2015/02/06 职场文书
经营场所证明范本
2015/06/19 职场文书
捐书仪式主持词
2015/07/04 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
小学运动会开幕词
2016/03/04 职场文书
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers