Trong PHP, cách đơn giản nhất để chuyển đổi một bộ ba RGB sang giá trị HSV là gì?RGB đến HSV trong PHP
Trả lời
<?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;
}
Tôi đã dọn dẹp một vài lỗi trong mã này, kiểm tra nó với kết quả đã biết và nó hoạt động tốt. Cảm ơn! –
Tôi đang cố gắng nắm bắt cách HSV hoạt động. Trước khi bạn trả lại các giá trị, bạn không phải nhân $ H với 360 và $ S và $ V lên 100? –
@JackHumphries - Xem câu trả lời của tôi để có một phiên bản dễ theo dõi dễ dàng hơn, cũng trả về độ và tỷ lệ phần trăm. – Unsigned
Đây là phương pháp đơn giản, đơn giản trả về giá trị HSV dưới dạng độ và tỷ lệ phần trăm, đó là công cụ chọn màu của Photoshop.
Lưu ý rằng các giá trị trả về không được làm tròn, bạn có thể tự làm điều đó nếu được yêu cầu. Hãy ghi nhớ rằng H(360) == H(0)
, vì vậy giá trị của H
359.5
và lớn nên vòng để 0
nặng nề tài liệu cho các mục đích học tập.
/**
* 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);
}
?>
Câu trả lời thú vị. Chỉ là những gì tôi cần để tìm hiểu làm thế nào để tính toán phần giá trị của HSV. Ty. – Deanie
Có cách nào để đảo ngược quá trình này, chuyển đổi lại không? – JacobTheDev
@JacobTheDev Tất nhiên. [Câu hỏi này] (https://stackoverflow.com/q/3018313/629493) có các ví dụ. – Unsigned
- 1. RGB đến HSV màu trong javascript?
- 2. Từ RGB để HSV trong OpenGL GLSL
- 3. Làm cách nào để thay đổi màu RGB thành HSV?
- 4. OpenCV hình ảnh chuyển đổi từ RGB để HSV
- 5. PHP tạo RGB
- 6. Chuyển đổi hình ảnh từ RGB sang không gian màu HSV
- 7. HBRUSH đến giá trị RGB
- 8. RGB để HSB Algorithm
- 9. PHP - lấy tên màu từ rgb
- 10. PHP - Tìm RGB gần nhất với RGB được xác định trước từ danh sách
- 11. Thuật toán để tạo các màu RGB đã tốt nghiệp trong PHP
- 12. Chuyển đổi mã vòng tròn HSV từ Delphi thành C#
- 13. RGB Int to RGB - Python
- 14. Trong mô hình RGB có bao nhiêu sắc riêng biệt?
- 15. Các vấn đề LED RGB RGB
- 16. giá trị rgb 0 đến 1 tỷ lệ
- 17. thêm/trộn màu sắc trong không gian HSV
- 18. PHP GD bảng màu
- 19. cmyk để rgb bằng cách sử dụng php
- 20. Làm thế nào để chuyển đổi RGB thành dữ liệu mã hóa base64 1px trong php
- 21. C++ Bắt RGB từ hBitmap
- 22. OpenCV cách ghi đè hình ảnh RGB
- 23. Làm mờ LED RGB RGB từ màu này sang màu khác?
- 24. Chuyển YUV sang BGR hoặc RGB trong OpenCV
- 25. Cách chuẩn hóa giá trị RGB với giá trị RGB tham chiếu
- 26. rgb (34, 34, 34) để UIColor
- 27. Năm và tuần cho đến nay trong php
- 28. Cách chuyển hướng đến cùng một trang trong PHP
- 29. Tạo hình ảnh từ dữ liệu RGB?
- 30. RGB to CMYK và thuật toán ngược
Tìm kiếm nhanh trên google được tìm thấy http://delphi.about.com/od/adptips2006/qt/RgbToHsb.htm. Không phải trong PHP, nhưng tất cả đều là toán học nên nó phải dễ dàng. – mk12