contrast

Easily calculate color contrast ratios  https://p.ce9e.org/contrast/
git clone https://git.ce9e.org/contrast.git

commit
def3414774f82384ef856e2b1c8fb85ef9b22674
parent
f3b07b94011359cff7b0874bab87cf9a01e68fe3
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-04-27 05:28
use canvas to convert color to srgb

https://stackoverflow.com/a/69057776/1636973

Diffstat

M contrast.js 21 ++++++++-------------
M index.html 1 +

2 files changed, 9 insertions, 13 deletions


diff --git a/contrast.js b/contrast.js

@@ -6,6 +6,7 @@ var bgInput = document.querySelector('#bgInput');
    6     6 var swapButton = document.querySelector('#swap');
    7     7 var gradient = document.querySelector('#output .gradient');
    8     8 var description = document.querySelector('#output .description');
   -1     9 var canvas = document.querySelector('canvas');
    9    10 
   10    11 var score = function(linRange, linLevels) {
   11    12   // Estimate home many color combinations fall into each category,
@@ -64,16 +65,11 @@ var makeGradient = function(scores) {
   64    65 };
   65    66 
   66    67 var parseColor = function(s) {
   67    -1   var rgba = s.match(/rgba?\(([\d.]+), ([\d.]+), ([\d.]+)(?:, ([\d.]+))?\)/);
   68    -1   if (!rgba) {
   69    -1     return null;
   70    -1   }
   71    -1   rgba.shift();
   72    -1   if (rgba[3] === undefined) {
   73    -1     rgba[3] = 1;
   74    -1   }
   75    -1   rgba = rgba.map(x => parseFloat(x, 10));
   76    -1   return rgba;
   -1    68   var context = canvas.getContext('2d');
   -1    69   context.fillStyle = s;
   -1    70   context.fillRect(0,0,1,1);
   -1    71   var data = context.getImageData(0, 0, 1, 1, {colorSpace: 'srgb'}).data;
   -1    72   return [data[0], data[1], data[2], data[3] / 255];
   77    73 };
   78    74 
   79    75 var setColor = function(input, key) {
@@ -114,9 +110,8 @@ var oninput = function() {
  114   110 
  115   111     favicon.setFavicon(bgInput.value, fgInput.value);
  116   112 
  117    -1     var computed = getComputedStyle(document.body);
  118    -1     var bg = parseColor(computed.backgroundColor);
  119    -1     var fg = parseColor(computed.color);
   -1   113     var bg = parseColor(bgInput.value);
   -1   114     var fg = parseColor(fgInput.value);
  120   115 
  121   116     var range = wcag2.getContrastRange(fg, bg);
  122   117     var absRange = wcag2.getAbsRange(range);

diff --git a/index.html b/index.html

@@ -32,6 +32,7 @@
   32    32 		<p><a href="https://www.w3.org/TR/WCAG/#contrast-minimum">WCAG on contrast ratio</a></p>
   33    33 	</div>
   34    34 
   -1    35 	<canvas hidden></canvas>
   35    36 	<script src="contrast.js" type="module"></script>
   36    37 </body>
   37    38 </html>