我正在尝试模拟Open XML 的Tint效果.它的作用是通过移动色调来改变图像中像素的色调.它需要2个参数:1)hue(以度为单位)和2)amt(数量,百分比).我遇到问题是#2.规范说明:
色调:根据指定的量将颜色值朝向或远离色调移动.
- amt(Amount) - 指定颜色值的移位量.
- hue(Hue) - 指定要着色的色调.
从不关注XML构造,我可以模拟具有amt100%的值.所以,例如,如果我想要蓝色(色调:240°),我可以创建它(有色的).这是一个例子:
原始和着色(色调= 240,金额= 100%).

这可以通过将色调设置为240,保持饱和度和亮度相同并转换为RGB并写入每个像素来实现.
这是我无法实现的:
色调= 240(蓝色),金额= 30% ,50%和80%,分别

再次,对于规范Amount说,通过颜色值多少转移指定.我已经试过各种方法在这里得到这个工作,但似乎无法(hue=hue*amount,originalhue * amount + hue,等)
更多实例:Hue = 120(绿色),数量= 30%,50%,80%和100%.在100%的一个,我可以得到.

以下是上图中单个像素的一些值列表:
Hue Amount R … 有人知道从RGB颜色获得饱和度的正确公式吗?
我已经有了一个功能.我已经尝试过在互联网上发布的大量内容,但只有这一个似乎对我有用(第一次),除了饱和度水平偶尔会稍微偏离.
rgb(204,153,51)应该相等hsl(40,60,50),而不是我hsl(40,75,50).你可以看到我的色调和亮度是正确的,事实上,饱和度大多也是正确的,但有时它不是,我需要纠正,如果可以的话.
这是我到目前为止构建的,所以我可以检查我的图像的所有颜色值是否正确,然后将它们存储在我的搜索引擎的数据库中.

这是我认为饱和度计算错误的问题:
function RGBtoHSL($red, $green, $blue)
{
$r = $red / 255.0;
$g = $green / 255.0;
$b = $blue / 255.0;
$H = 0;
$S = 0;
$V = 0;
$min = min($r,$g,$b);
$max = max($r,$g,$b);
$delta = ($max - $min);
$L = ($max + $min) / 2.0;
if($delta == 0) {
$H = 0;
$S = 0;
} else {
$S = $delta / $max;
$dR = ((($max - $r) …Run Code Online (Sandbox Code Playgroud) 我正在尝试一个简单的演示,我给了元素颜色hsl.根据我的经验,我知道0CSS 中的(ZERO)是无单元的.如果要将0指定为值,则可以离开单位.
然而,hsl/hsla似乎并非如此.在Chrome和Firefox上,都会导致无效的属性值.
一个切线相关的问题是这个,但它包含的答案是零应该是指无规则的指标.
hsla(0,0%,0%,0)的任何错误,变成hsla(0,0,0,0)?(缺少百分号)
hsl(0,0,0) // error
hsl(0,0%,0) // error
hsl(0,0,0%) // error
Run Code Online (Sandbox Code Playgroud)
它是否专门设计用于零以外的单位?有没有这样的其他属性,其中一个单位在零旁边是必须的?
维基百科和大量在线资源为 RGB 之间的各种颜色空间转换提供了详细且丰富的帮助。我需要的是直接的 YUV->HSL/HSV 转换。
\n\n事实上,我需要的只是色调(不太关心饱和度或亮度亮度/值)。换句话说,我只需要计算给定 YUV 颜色的“颜色角度”。
\n\n任何语言的代码就足够了,尽管我更喜欢 C 风格的语法。
\n\n请注意,YUV 我指的是 Y\xe2\x80\xb2UV,又名 YCbCr(如果这有什么区别的话)。
\n所以我一直在尝试在HSLA中使用CSS变量。我需要保持相同的颜色,但只需更改不透明度。
<div>
// content here
</div>
Run Code Online (Sandbox Code Playgroud)
社会保障体系
:root {
--color: 332, 61%, 78%;
}
div {
background: hsla(var(--color), 0.5);
}
Run Code Online (Sandbox Code Playgroud)
https://codepen.io/sammiepls/pen/zLpvXY
所以我想我可以将 hsl 颜色保留在那里,并通过使用变量来更改悬停时的不透明度或诸如此类的东西。如果我只使用纯 CSS,它就可以工作。但我使用的是 SCSS,它导致它失败,因为 SASS 有它自己的 HSL 函数,需要三个值;我得到的错误基本上是没有足够的参数。有人找到解决办法吗?我尝试在整个函数周围使用字符串插值 #{} 但它不起作用。
我发现的奇怪的事情。当转换#579f2f为 hsl 时,我到达hsl(99, 54%, 40%);. 当将其转换回十六进制时,我得到#559d2f。我使用了各种在线工具来测试这一点。
我猜原因是 hsl 将颜色描述为色调 (0-360)、饱和度 (0-100%) 和亮度 (0-100%),而十六进制只是 RGB (0-255,0-255,0-255 )写为三个十六进制数,因此 hsl 描述的颜色空间(或您可能表达的颜色数量)是不同的。
RGB: 255^3 = 16,581,375 colors
HSL: 360*100*100 = 3,600,000 colors
Run Code Online (Sandbox Code Playgroud)
我的这个假设是正确的还是有其他原因?
我正在尝试将一些HSL值转换为RBGData.Colour模块.Hackage doc说,Hue总是在0-360范围内.但现在有任何范围Saturation和Lightness价值观.它们是在[0,100]还是在[0,1]范围内?
我认为第一个变体是正确的,但似乎不是.
?> hsl 100 50 50
RGB {channelRed = 866.6666666666692, channelGreen = -2400.0, channelBlue = 2500.0}
Run Code Online (Sandbox Code Playgroud)
比我尝试使用范围[0,1]来饱和度和亮度.
?> fmap truncate . (\(h,s,l) -> hsl h s l) $ (0,0,0)
RGB {channelRed = 0, channelGreen = 0, channelBlue = 0}
it :: RGB Integer
Run Code Online (Sandbox Code Playgroud)
这就是为什么我开始以为只Saturation应该是一个Double在[0,1].
例如,我们在HSL格式上有一些颜色值.
?> let c = (34.0,0.54,68.0)
c :: (Double, Double, Double)
Run Code Online (Sandbox Code Playgroud)
比我们将其转换为RGB并截断所有值
?> fmap …Run Code Online (Sandbox Code Playgroud) C#有一个很方便的getHue方法,但是我找不到set Hue方法。有吗?
如果不是,我认为在更改色调后定义颜色的最佳方法是将 HSL 值转换为 RGB,然后设置 RGB 值。我知道互联网上有用于执行此操作的公式,但是我如何最好地使用 C# 执行从 HSL 到 RGB 的这种转换?
谢谢你
我已经创建了这个函数来将RGB颜色转换为HSL颜色.它完美无缺.
但我需要让它运行得更快,因为它用于替换画布上的颜色,我需要减少更换的时间.由于图像包含360k像素(600x600px),因此任何东西都可以让它更快.
这是我目前的实施:
/**
* Convert RGB Color to HSL Color
* @param {{R: integer, G: integer, B: integer}} rgb
* @returns {{H: number, S: number, L: number}}
*/
Colorize.prototype.rgbToHsl = function(rgb) {
var R = rgb.R/255;
var G = rgb.G/255;
var B = rgb.B/255;
var Cmax = Math.max(R,G,B);
var Cmin = Math.min(R,G,B);
var delta = Cmax - Cmin;
var L = (Cmax + Cmin) / 2;
var S = 0;
var H = 0;
if (delta !== 0) { …Run Code Online (Sandbox Code Playgroud) 我有以下字符串取自原子一暗语法:
one_dark_syn = """
@hue-1: hsl(187, 47%, 55%); // <-cyan
@hue-2: hsl(207, 82%, 66%); // <-blue
@hue-3: hsl(286, 60%, 67%); // <-purple
@hue-4: hsl( 95, 38%, 62%); // <-green
@hue-5: hsl(355, 65%, 65%); // <-red 1
@hue-5-2: hsl( 5, 48%, 51%); // <-red 2
@hue-6: hsl( 29, 54%, 61%); // <-orange 1
@hue-6-2: hsl( 39, 67%, 69%); // <-orange 2
"""
Run Code Online (Sandbox Code Playgroud)
我想使用 python 将 hsl 值交换为十六进制。到目前为止,我已经编写了一组看起来非常令人讨厌的循环来将值解析为 numpy 数组:
od_colors = [i.split(";")[0].split(":")[1] for i in one_dark_syn.split("\n") if "hsl" in …Run Code Online (Sandbox Code Playgroud) hsl ×10
colors ×6
rgb ×5
c# ×2
css ×2
color-space ×1
gdi+ ×1
haskell ×1
hex ×1
hsv ×1
image ×1
javascript ×1
optimization ×1
php ×1
python ×1
python-3.x ×1
sass ×1
yuv ×1