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巧获服务器端信息
Dec 06 PHP
php 静态化实现代码
Mar 20 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
php实现设计模式中的单例模式详解
Oct 11 PHP
php防止站外远程提交表单的方法
Oct 20 PHP
php的闭包(Closure)匿名函数详解
Feb 22 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
Oct 15 PHP
PHP rmdir()函数的用法总结
Jul 02 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
很实用的一个完整email发送程序
2006/10/09 PHP
第十二节--类的自动加载
2006/11/16 PHP
用PHP函数解决SQL injection
2006/12/09 PHP
php程序内部post数据的方法
2015/03/31 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
详解php协程知识点
2018/09/21 PHP
网页常用特效代码整理
2006/06/23 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
Python 多线程实例详解
2017/03/25 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
详解python深浅拷贝区别
2019/06/24 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
如何掌握自荐信格式呢
2013/11/19 职场文书
工程业务员工作职责
2013/12/07 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
城管个人总结
2015/02/28 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang