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脚本的10个技巧(5)
Oct 09 PHP
如何使用PHP中的字符串函数
Nov 24 PHP
MySQL授权问题总结
May 06 PHP
php下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
PHP中遇到的时区问题解决方法
Jul 23 PHP
PHP开发中常用的十个代码样例
Feb 02 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
PHP培训要多少钱
Jun 06 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
laravel5.6实现数值转换
Oct 23 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
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
JS面向对象编程 for Cookie
2010/09/19 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
浅谈python numpy中nonzero()的用法
2018/04/02 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
美国在线家具网站:GDFStudio
2021/03/13 全球购物
人事主管的岗位职责
2013/11/16 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
幼儿园中秋节活动方案
2014/02/06 职场文书
买卖协议书范本
2014/04/21 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
迁户口计划生育证明
2014/10/19 职场文书
婚礼答谢礼品
2015/01/20 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android