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带密码功能并下载远程文件保存本地指定目录 修改加强版
May 16 PHP
php下通过伪造http头破解防盗链的代码
Jul 03 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
PHP中其实也可以用方法链
Nov 10 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
跟我学Laravel之视图 &amp; Response
Oct 15 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 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 的 __FILE__ 常量
2007/01/15 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
JavaScript 函数式编程的原理
2009/10/16 Javascript
javascript动画浅析
2012/08/30 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
解读python logging模块的使用方法
2018/04/17 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
python如何将多个PDF进行合并
2019/08/13 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
Python自动化操作实现图例绘制
2020/07/09 Python
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
公司授权委托书范文
2014/09/21 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
死亡证明书样本说明
2014/10/18 职场文书
2014年接待工作总结
2014/11/26 职场文书
无罪辩护词范文
2015/05/21 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers