在PHP中,将RGB三元组转换为HSV值最直接的方法是什么?PHP中的RGB到HSV
回答
<?php
function RGB_TO_HSV ($R, $G, $B) // RGB Values:Number 0-255
{ // HSV Results:Number 0-1
$HSL = array();
$var_R = ($R/255);
$var_G = ($G/255);
$var_B = ($B/255);
$var_Min = min($var_R, $var_G, $var_B);
$var_Max = max($var_R, $var_G, $var_B);
$del_Max = $var_Max - $var_Min;
$V = $var_Max;
if ($del_Max == 0)
{
$H = 0;
$S = 0;
}
else
{
$S = $del_Max/$var_Max;
$del_R = ((($var_Max - $var_R)/6) + ($del_Max/2))/$del_Max;
$del_G = ((($var_Max - $var_G)/6) + ($del_Max/2))/$del_Max;
$del_B = ((($var_Max - $var_B)/6) + ($del_Max/2))/$del_Max;
if ($var_R == $var_Max) $H = $del_B - $del_G;
else if ($var_G == $var_Max) $H = (1/3) + $del_R - $del_B;
else if ($var_B == $var_Max) $H = (2/3) + $del_G - $del_R;
if ($H<0) $H++;
if ($H>1) $H--;
}
$HSL['H'] = $H;
$HSL['S'] = $S;
$HSL['V'] = $V;
return $HSL;
}
我整理了这段代码中的一些错误,并根据已知的结果对它进行了测试,它工作正常。谢谢! – 2011-10-06 12:38:14
我想了解HSV的工作原理。在您返回值之前,您是否必须将$ H乘以360,并将$ S和$ V乘以100? – 2012-11-24 02:13:12
@JackHumphries - 查看我的答案稍微简单一些,也会返回度数和百分比。 – Unsigned 2012-12-15 00:02:45
下面是一个简单,直接的方法,它返回HSV值作为度数和百分比,这是Photoshop的颜色选择器使用的。
请注意,返回值不是四舍五入的,如果需要,您可以自己做。请记住,H(360) == H(0)
,所以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);
}
?>
真棒回答。正是我需要学习如何计算HSV的价值部分。 TY。 – Deanie 2017-09-28 02:00:43
有没有办法扭转这个过程,将其转换回来? – JacobTheDev 2018-02-13 14:38:55
@JacobTheDev当然。 [这个问题](https://stackoverflow.com/q/3018313/629493)有例子。 – Unsigned 2018-02-13 18:40:35
- 1. OpenCV - RGB到HSV并回到RGB?
- 2. RGB到HSV颜色的JavaScript?
- 3. 从RGB到HSV在OpenGL GLSL
- 4. 将RGB值转换为HSV
- 5. ImageSharp将Rgb转换为Hsv
- 6. HSV(0 .. 255)RGB(0 .. 255)
- 7. 如何将RGB转换为HSV?
- 8. 从RGB到HSV的OpenCV图像转换阈值痛苦
- 9. 从RGB到HSV的UIColor转换,将亮度设置为UIColor
- 10. 如何在RGB空间中复制HSV值的添加/混合
- 11. HSV vs RGB色彩空间中像素的平均值
- 12. 如何将RGB转换为Cocoa Touch中的HSV?
- 13. 仅在RGB或HSV图像中增加黄色饱和度(Matlab)
- 14. 在OpenCV中将HSV转换为RGB失败
- 15. 使用matlab /八度音程从rgb转换为hsv图像回rgb
- 16. 将图像的颜色空间从RGB转换为HSV
- 17. 使用python将RGB值转换为等效的HSV值
- 18. 为什么HSV-RGB算法的工作方式如此?
- 19. 保存HSV值到Android中
- 20. 是否有一个用于HSV到RGB的内置C#/ .NET系统API?
- 21. Android从rgb转换为hsv,反之亦然
- 22. 通过jQuery将HSL或HSV转换为RGB
- 23. 颜色名称为RGB /十六进制/ HSL/HSV等
- 24. 使用RGB图像创建HSV直方图
- 25. 使用[0,255]范围将RGB转换为HSV
- 26. 我应该使用HSV/HSB还是RGB?为什么?
- 27. 将HSV转换为RGB无法正常工作Javascript
- 28. 在RGB和HSL/HSV之间转换:如何处理溢出?
- 29. 创建一个wpf渐变画笔编辑器。 (RGB颜色到HSL/HSV)
- 30. PHP的IMagick RGB到CMYK反转?
快速谷歌搜索发现http://delphi.about.com/od/adptips2006/qt/RgbToHsb.htm。不在PHP中,但它都是数学的,所以它应该很容易。 – mk12 2009-11-20 22:56:03