PHP 中的 RGB 到 HSV

2023-11-24

在 PHP 中,将 RGB 三元组转换为 HSV 值的最直接方法是什么?


这是一个简单、直接的方法,它以度数和百分比的形式返回 HSV 值,这就是 Photoshop 的颜色选择器所使用的方法。

请注意,返回值不会四舍五入,如果需要,您可以自行舍入。请记住H(360) == H(0), so H的值359.5更大的应该四舍五入到0

大量记录用于学习目的。

/**
 * Licensed under the terms of the BSD License.
 * (Basically, this means you can do whatever you like with it,
 *   but if you just copy and paste my code into your app, you
 *   should give me a shout-out/credit :)
 */

<?php

function RGBtoHSV($R, $G, $B)    // RGB values:    0-255, 0-255, 0-255
{                                // HSV values:    0-360, 0-100, 0-100
    // Convert the RGB byte-values to percentages
    $R = ($R / 255);
    $G = ($G / 255);
    $B = ($B / 255);

    // Calculate a few basic values, the maximum value of R,G,B, the
    //   minimum value, and the difference of the two (chroma).
    $maxRGB = max($R, $G, $B);
    $minRGB = min($R, $G, $B);
    $chroma = $maxRGB - $minRGB;

    // Value (also called Brightness) is the easiest component to calculate,
    //   and is simply the highest value among the R,G,B components.
    // We multiply by 100 to turn the decimal into a readable percent value.
    $computedV = 100 * $maxRGB;

    // Special case if hueless (equal parts RGB make black, white, or grays)
    // Note that Hue is technically undefined when chroma is zero, as
    //   attempting to calculate it would cause division by zero (see
    //   below), so most applications simply substitute a Hue of zero.
    // Saturation will always be zero in this case, see below for details.
    if ($chroma == 0)
        return array(0, 0, $computedV);

    // Saturation is also simple to compute, and is simply the chroma
    //   over the Value (or Brightness)
    // Again, multiplied by 100 to get a percentage.
    $computedS = 100 * ($chroma / $maxRGB);

    // Calculate Hue component
    // Hue is calculated on the "chromacity plane", which is represented
    //   as a 2D hexagon, divided into six 60-degree sectors. We calculate
    //   the bisecting angle as a value 0 <= x < 6, that represents which
    //   portion of which sector the line falls on.
    if ($R == $minRGB)
        $h = 3 - (($G - $B) / $chroma);
    elseif ($B == $minRGB)
        $h = 1 - (($R - $G) / $chroma);
    else // $G == $minRGB
        $h = 5 - (($B - $R) / $chroma);

    // After we have the sector position, we multiply it by the size of
    //   each sector's arc (60 degrees) to obtain the angle in degrees.
    $computedH = 60 * $h;

    return array($computedH, $computedS, $computedV);
}

?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中的 RGB 到 HSV 的相关文章

  • 如何在 json 中输出 javascript 日期

    我正在尝试时间线图表 http code google com apis visualization documentation gallery annotatedtimeline html Data Format http code go
  • PHP 下载脚本输出损坏的文件

    我正在用 PHP 为我的 CMS 构建一个文件下载类 当时我注意到它以不同的编码格式输出文件 我尝试使用 readfile file get contents fread 但似乎都在做同样的事情 这就像与输出缓冲有关的东西 我使用脚本下载的
  • SetInterval 函数不适用于 PHP 文件

    我有这样的index html
  • YUI压缩机或类似的PHP?

    我一直在我的测试服务器上使用 yuicompressor jar 来动态最小化已更改的 JavaScript 文件 现在我已经将网站部署到公共服务器上 我注意到服务器的策略禁止使用 exec 或其等效项 因此我不再执行 java 有没有一个
  • 用 PHP 截断文件末尾

    我有一个日志文件 我想在 PHP 读取该文件后将其截断 我的代码目前如下所示 fp fopen file r ftruncate fp 125000 fclose fp 但是 这会通过保留first1MB 不过 我想保留last1Mb 的文
  • Python 的高效图像缩略图控制?

    Python GUI 应用程序显示大量缩略图的最佳选择是什么 例如10000 或更多 出于性能原因 此类缩略图控件必须支持虚拟项目 即仅请求应用程序当前对用户可见的那些缩略图 In wxPython http wxpython org 您可
  • Laravel 5.4 将json保存到数据库

    帮我将 json 保存到数据库 表字段类型 文本 我有带有强制转换数组的模型 class Salesteam extends Model protected casts team members gt array 我想要像这样 index
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • 使用 PHP 更新 XML 节点

    我有一个 XML 文件 test xml
  • 如何使用 php DOM 获取 内的值?

    我如何使用 php DOM 获取 内的值 这是我的 xml 中的一些代码
  • 在php中获取大于2GB的文件大小的最佳方法?

    我想检查本地驱动器上的文件大小windows OS 但是PHP原生函数filesize 仅当文件大小小于时才有效2GB 大于的文件2GB将返回错误的数字 那么 是否有其他方法来获取大于的文件大小2GB 非常感谢 您始终可以使用系统的文件大小
  • 随机错误 symfony:ContextErrorException: 警告: simplexml_load_file(): I/O 警告: 无法加载外部实体

    在我的 Symfony 项目中 当我进入应用程序中的随机页面时 会出现以下随机错误 ContextErrorException Warning simplexml load file I O warning failed to load e
  • 查明具有特定 ID 的会话是否已过期

    我正在创建一个上传功能 将用户上传的文件存储在服务器上 并以用户的会话 ID 作为名称 现在 我只想将此文件保留在服务器上 直到该会话处于活动状态 所以 我的问题是 如何根据会话 ID 确定会话是活动的还是过期的 以便在后一种情况下我可以安
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • PHP 电子邮件验证[重复]

    这个问题在这里已经有答案了 For PHP最好的电子邮件验证方法是什么preg NOT ereg因为它是已弃用 删除 I don t需要检查该网站是否存在 这不像最高安全性 我找到了很多方法ereg但它们 显然 不是好的做法 我建议你使用F
  • 将 echo 和 print 合并到一个语句中

    echo 1 print 2 3 返回 214 脚本如何以 14 结尾 当你这样做时 echo 1 print 2 3 PHP 会做 demo http codepad viper 7 com OfrNrs line op fetch ex
  • PHP-如何根据条件配对数组中的项目

    如何将数组中的项目配对 假设我有一个数组Fighters 我想根据他们的情况将他们配对Weights 体重最接近的拳手应作为配对最佳匹配 但如果他们是在同一个团队中 他们不应该配对 团队 1 战斗机A体重为60 战斗机B体重为65 2队 战
  • PHP Json_encode 将空格更改为加号 +

    我有一个网络应用程序 我首先将 JSON 数据存储在 cookie 中 然后每 x 秒保存到数据库 它只是打开与服务器的连接 服务器读取 cookie 它实际上并不通过 POST 或 GET 发送任何内容 当我保存到 cookie 时 我的
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht
  • 使用 Swift 邮件程序发送邮件时出现错误 501

随机推荐

  • 如何让椭圆闪烁?

    我正在尝试在 WPF 中制作自定义控件 我希望它能够模拟 LED 闪烁的行为 该控件有三种状态 开 关和闪烁 我知道如何通过后面的代码设置打开和关闭 但是这个 WPF 动画东西简直让我发疯 我无法让任何东西动画化 该计划是拥有一个称为状态的
  • Numpy 矩阵旋转任意度数

    我尝试找到一种方法 在包含 RGB 等三个波段但值大于 0 255 的矩阵上应用任意度数的矩阵旋转 这是我的数据示例 其形状为 100 100 3 847 5 877 886 821 5 856 5 898 850 883 969 5 88
  • 我可以显式导入 dom 类型吗?

    按照惯例 开发人员会在全球范围内包含全局 dom 类型并在全球范围内使用它们 compilerOptions lib dom 是否可以显式使用 dom 类型 就像是 import MessagePort HTMLElement from d
  • 如何在 Android 中阅读 pdf

    我想在android 中阅读PDF 文件 我将 PDF 文件放在 asset 文件夹中 我如何从那里读取 PDF 文件 PDF阅读器链接 我已经检查了上面的链接 但它对我不起作用 它给我一个错误 说找不到活动 我还想在WebView中打开P
  • 作为类成员的灵活数组

    海湾合作委员会 G 9 这段代码 class foo int bar 111 123 产生有关灵活数组的初始值设定项的错误 但这一个 class foo int bar 2 111 123 正常编译 有什么解决方法可以不计算我输入的值吗 与
  • Jackson - 动态抑制属性的序列化(写入)

    我正在尝试使用 Jackson 将 Tomcat jersey 中的 java 对象转换为 JSON 对象 并希望动态抑制某些属性的序列化 写入 我可以使用 JsonIgnore 但我想在运行时做出忽略决定 有任何想法吗 因此 作为下面的示
  • Spring Zuul API 网关,在同一请求中使用 Spring Session / Redis 进行身份验证和路由

    在过去的几天里 我一直在苦苦寻找如何做到这一点 最后决定承认失败并寻求帮助 拜托 我遵循 Dave Syer 博士关于 Angular 和 Spring Security 的教程 特别是 Zuul 代理作为 api 网关以及将 Spring
  • toString():用于调试还是用于人类?

    class Address private enum Component NUMBER STREET STATE COUNTRY private Map
  • 真正的随机C#生成器

    Random ran new Random byte tmp byte ran Next 10 这段代码有替代方案吗 它似乎没有完全随机的行为 发生这种情况的原因有多种 一个常见的问题是创建多个实例Random程序中的类 当使用Random
  • 无法从 Visual Studio 2015 连接到 mysql

    所以我已经花了大约 2 天的时间尝试解决这个问题 我已经在我的工作场所电脑上成功修复了这个问题 但无法让它在我的家庭电脑上工作 我读过十几篇 SO 文章和 Oracle 论坛文章等等 但它仍然不起作用 我有用于 Visual Studio
  • 可视化点云

    我在找到的视差图像上有来自 gpu reprojectImageTo3D 的 3D 点 我现在想显示这个点云 如何将找到的点云转换为OpenCV to sensor msgs PointCloud2 我不需要发布点云 这仅用于调试可视化 是
  • 访问令牌中缺少“aud”声明

    由于我未知的原因 aud 声明不存在于访问令牌中 尽管它存在于 id 令牌中 将访问令牌发送到 API 后 我收到以下错误 持有者未经过身份验证 失败消息 IDX10214 观众 验证失败 观众 空 不匹配 validationParame
  • Flutter 2:无法确定捆绑的 Java 版本

    我在 Windows 10 下使用 Android Studio 来运行 flutter 项目 但是我有这个警告我想修复 X Unable to determine bundled Java version Try updating or
  • 在javascript中将指数表示法小数位限制为4

    如何在 JavaScript 中使用这种类型的值将小数位限制为 4 e 是指数 因为我使用的是十个值的幂 toFixed 似乎不起作用 1 0531436913408342e 7 5 265718456704172e 7 8 4251495
  • CSS Flexbox 影响 Bootstrap 3 布局

    我正在尝试在 Bootstrap 3 中创建下面的布局 我可以实现 sm 下显示的布局 并且使用 Flexbox 我想将 div 1 和 2 交换为 xs 屏幕 问题是 当我将包含的 div 设置为 Flexbox 时 它会将 sm 布局上
  • 使用 ContentProvider 时出现“错误代码 5:数据库已锁定”

    我有一个应用程序 它在启动并绑定到该活动的单独进程中运行带有服务的活动 该服务包含一个处理程序 该处理程序发布一个可运行对象以在延迟后运行 我希望每个组件都登录到数据库 因此我实现了一个处理数据库访问的内容提供程序 并通过扩展的 Async
  • Chrome 中“此网页有重定向循环”,但在 FF 和 IE 上工作正常?

    这一页http www japanforum com forum japanese language help 39454 tara past tense clause html可以使用 FireFox IE Safar Opera 访问
  • 无法将 Angular 从版本 6 降级到版本 5

    最近 2018 年 5 月 更新的 Angular 稳定版本已经发布 我已成功从版本 5 迁移到版本 6 但由于某种原因我想回滚到版本 5 我尝试过以下命令 npm uninstall g angular cli 它卸载了最新版本的 Ang
  • 如何在没有匿名类型的情况下按多个字段进行 LINQ 区分

    我有一个名为CLASS与田野 BATCH DEGREE DEPT SEM SECTION GROUP 我有以下记录 记录1 2009 B E CSE 3 Sem Sec 1 Group 记录2 2009 B E CSE 3 Sem Sec
  • PHP 中的 RGB 到 HSV

    在 PHP 中 将 RGB 三元组转换为 HSV 值的最直接方法是什么 这是一个简单 直接的方法 它以度数和百分比的形式返回 HSV 值 这就是 Photoshop 的颜色选择器所使用的方法 请注意 返回值不会四舍五入 如果需要 您可以自行