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+javascript液晶时钟
Oct 09 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
解析PHP中empty is_null和isset的测试
Jun 29 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
Zend Framework入门知识点小结
Mar 19 PHP
微信支付开发订单查询实例
Jul 12 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
Oct 25 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
May 12 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 PHP
PHP加MySQL消息队列深入理解
Feb 27 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
一个查看session内容的函数
2006/10/09 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
php输出图像的方法实例分析
2017/02/16 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
js实现简单的验证码
2015/12/25 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
python实现QQ批量登录功能
2019/06/19 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
html5启动原生APP总结
2020/07/03 HTML / CSS
人力资源管理毕业生自荐信
2013/11/21 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
2014年学习部工作总结
2014/11/12 职场文书
员工加薪申请报告
2015/05/15 职场文书
关于环保的宣传稿
2015/07/23 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
Python中的tkinter库简单案例详解
2022/01/22 Python
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏