简体   繁体   English

如何生成 RGB 的随机阴影?

[英]How can I generate random shades of an RGB?

I'm trying to find a way to generate random shades of an RGB color.我正在尝试找到一种方法来生成 RGB 颜色的随机阴影。

As you can see in the snippet, most shades are pretty ok but there are some that are completely irrelevant visually.正如您在片段中看到的那样,大多数阴影都很好,但有些在视觉上完全不相关。 Is there a way of improving this?有没有办法改善这个?

 let resultsContainer = document.getElementById('results') let original = { r: 244, g: 102, b: 255 } // generate random shades of this color let max = 100 let min = 100 let results = [] document.getElementById('original').style.background = `rgb(${original.r}, ${original.g}, ${original.b})` function randomBetween(min, max) { min = min < 0? 0: min max = max > 255? 255: max return min + Math.floor(Math.random() * (max - min + 1)) } while (results.length < 10) { results.push({ r: randomBetween(original.r-min, original.r+max), g: randomBetween(original.g-min, original.g+max), b: randomBetween(original.b-min, original.b+max), }) } results.forEach(({ r, g, b }) => { let result = document.createElement('div') result.className = 'result' result.style.background = `rgb(${r}, ${g}, ${b})` resultsContainer.appendChild(result) })
 .result { float:left; width: 50px; height: 50px; }
 <div id="original" class="result"></div> <br> <br> <br> <br> <div id="results"></div>

instead of RGB, it's better to use HSL( Hue,Saturation,Lightness), and only randomize Saturation and Lightness to get different shades.而不是 RGB,最好使用 HSL(Hue,Saturation,Lightness),并且只随机化 Saturation 和 Lightness 以获得不同的色调。

 let resultsContainer = document.getElementById('results') let original = { h: 296, s: 100, l: 70 } // generate random shades of this color let max = 40 let min = 40 let results = [] document.getElementById('original').style.background = `hsl(${original.h}deg, ${original.s}%, ${original.l}%)` function randomBetween(min, max) { min = min < 10? 10: min // under 10 it becomes too dark max = max > 90? 90: max // over 90 it becomes too light return min + Math.floor(Math.random() * (max - min + 1)) } while (results.length < 10) { results.push({ h: original.h, s: randomBetween(original.s-min, original.s+max), l: randomBetween(original.l-min, original.l+max), }) } results.forEach(({ h, s, l }) => { let result = document.createElement('div') result.className = 'result' result.style.background = `hsl(${h}deg, ${s}%, ${l}%)` resultsContainer.appendChild(result) })
 .result { float:left; width: 50px; height: 50px; }
 <div id="original" class="result"></div> <br> <br> <br> <br> <div id="results"></div>

To shade RGB, multiply each r, g, b, by a percentage.要对 RGB 进行着色,请将每个 r、g、b 乘以一个百分比。 To tint, for each r, g, b, use: color + value% * (255 - color).要着色,对于每个 r、g、b,使用:color + value% * (255 - color)。 Easy peasy.十分简单。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM