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+MySql编写聊天室
Oct 09 PHP
smarty中英文多编码字符截取乱码问题解决方法
Oct 28 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
php生成短域名函数
Mar 23 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
twig模板常用语句实例小结
Feb 04 PHP
php处理复杂xml数据示例
Jul 11 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
Smarty模板语法详解
Jul 20 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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页面防重复提交方法总结
2013/11/25 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
删除重复数据的算法
2006/11/23 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python2包含中文报错的解决方法
2018/07/09 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
python list的index()和find()的实现
2020/11/16 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
门卫岗位安全职责
2013/12/13 职场文书
财务管理专业自荐信范文
2013/12/24 职场文书
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
小学毕业感言50字
2014/02/16 职场文书
迎七一演讲稿
2014/09/12 职场文书
社区活动总结
2015/02/04 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技