You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.6 KiB
Markdown

---
draft: true
title: "Deterministically Mapping Strings to RGB Colors"
aliases: ["Deterministically Mapping Strings to RGB Colors"]
date: "2025-01-25"
series: ["strings-to-colors"]
series_order: 0
author: "Nick Dumas"
authorTwitter: ""
cover: ""
tags: ["golang"]
keywords: ["golang"]
summary: "Using Go so I don't have to think about color palettes."
showFullContent: false
---
{{< lead >}} {{ </ lead >}}
## Inspiration
The XMPP site has a document describing https://xmpp.org/extensions/xep-0392.html#algorithm-genpalette
## The Plan
4 weeks ago
- Take an arbitrary UTF-8 string
- Generate an RGB or RGBA color code for it in a deterministic way
- SHA1 the string
- Interpret equally sized chunks of the hash as integers
- Scale those integers into an 8-bit unsigned space
## The Implementation
### Hashing
{{< highlight go >}}
{{</ highlight >}}
### Interpolation
- Not sure if interpolation is the right technical term
- Using generics
{{< highlight go >}}
{{</ highlight >}}
## The Results
Below is a sample of "lorem ipsum" with each word colored using this algorithm.
4 weeks ago
<p><span style="color:#FDC749;">Lorem</span> <span style="color:#D39A85;">ipsum</span> <span style="color:#452D59;">dolor</span> <span style="color:#3A852F;">sit</span> <span style="color:#0454D4;">amet</span>, <span style="color:#886B09;">consectetur</span> <span style="color:#31A0E5;">adipiscing</span> <span style="color:#99215D;">elit</span>. </p>
It doesn't look too bad.
4 weeks ago
## Possible Improvements
4 weeks ago
- Provide HSV or HSL color values
- Light/dark mode awareness
- Accessibility. The colors chosen are effectively random with no regard for color schemes, background, display device capability