Skip to content

Instantly share code, notes, and snippets.

@pinealan
Last active September 3, 2021 00:48
Show Gist options
  • Save pinealan/8a31ded72763303ab7a417611f18cda7 to your computer and use it in GitHub Desktop.
Save pinealan/8a31ded72763303ab7a417611f18cda7 to your computer and use it in GitHub Desktop.
Compressed encoding for web safe color.
import base64
import itertools
import zlib
# look up table for web safe color rgb hex
allowed_hex = ['0', '3', '6', '9', 'c', 'f']
code_to_hex = {idx: ''.join(s)
for idx, s in enumerate(itertools.product(allowed_hex, repeat=3))}
hex_to_code = {v: k for k, v in code_to_hex.items()}
def chunk(s):
return [s[i:i+3] for i in range(0, len(s), 3)]
def encode(s: str):
return base64.b64encode(zlib.compress(bytes([hex_to_code[x] for x in s])))
def decode(s: str) -> str:
return ''.join(code_to_hex[b] for b in zlib.decompress(base64.b64decode(s)))
@pinealan
Copy link
Author

pinealan commented Sep 3, 2021

String representation for donda image

[b'eJyVjsENwCAIRW91F/9Jh+Ekw3CCYRiyELW2x74g+S8GAvCXWq+S7VBffG2y5yJVlIitdSLquBBFqjZRRnzzMnNz6YAcN5Nw90zZ4y0XHpwD2zkWDdtunt7UH5e8iMNvlKtPAw==',
 b'eJyFjrENwCAMBDu8C1QwjKswjCt+GA8Zv0mkUOWRkM//xrT2o0qVlEgpLINr/bhH/C3k5K4W0v7wtdwBODZaVDxAjk04Fb73aCg2kSfTidqGRXPISFu5ZLGd8TUkH4Lxcrf8UFjBjFvuVdwGJ05I',
 b'eJxtjLsNAzEMQzt7F7HSDaPqbhhX5jAaMpScBAgQFvo8Pxn4zRz/YtbFupwc3VDzMOi9jpsNeCiYn099MzPvGps6U2Bf2vMRcAqQq3aGaulCMZG5vPwGEtSj/SZRpii/gtp2rHznKezYeQ668TrvmskXNr1Whw==',
 b'eJxlzLERACEIBMBMe4FIiiHSYoykGIv8Q9TgvRmVBUZmD6VEOG+ydwnhneTbdKp1l6IotCNjcJ9IZX8NCTcYmGGb3eeGwZ7D7bFTr+uyXOuex175WWBzl+hLlvW/tnZs7voB6TNjxA==',
 b'eJxdTrENwCAM28ovzRSOYWqPyRQfkyMbJ0WVaiGwHWM4jh/OhojUlkexbRJDiqcp5oCtdN6kgTB9k4qGz04sIHJFWM9Xqwjcpe9ghoZPllpquSpx5bsK6lkBa8ZbtvX6NFxZF93KQh0cjF3IL3nEAw8/Un4=',
 b'eJxFjrEBRCEIQzvZRSqWsXMYKhkmQx4E/RcbH5DAGFezJUOpqU9m9v11nhPw9ecobRVCCkg+JqSMLUasbucSzsNVpPcFWFltKE4HOvHm5YPb28d50FAMfIm3f5wVa0b44sB+927zyvQ++AcxKk6J',
 b'eJxNj7EVAzEIQzuzi6nMMFTOMFTWMAwZwYsvR/clQKAamchQ1icz5cWbXCqAZqfTXcUixfkwBe/5/e5PkY3L3Ich/nD8+SjX4XLiuPnhHdenVjEgG0q/pbLa/Uk+xuJcdZfgOidj2opw3jiHmtmq+HpBvnMUZjc=',
 b'eJxdj0EOxSAIRHf1LrDCw7Cqh2Elh+GQndFvflMSJW8YUCp1FCIU0Xrmh+vFouQ+8tTVyA7MP5uznp0M/9TN3sCeMNrcAyFEctAotNUwu+F0duVSkLbt/kGt8tU0as3E4a/0CIt3eEzsEnhViILbjCuBReTY9AGOhmKa',
 b'eJxdjbERxTAIQ0t2sSoYxl2GURWGYcjIJPm+HzXcQ0hUVQZYUko9581k/XO8vh3NODojf3ES0Q0vn44pzgrMdS8Gs+fDZlM20ZwZBnRcuc2Eqfj+K6YbbDNVOuDn+qfg0hhauOOnga/25gK0sGZx',
 b'eJyNjrERwDAIA7uwS1Q5w1DZw7hCwzBkMNwlThcK4E8I4KS7U6Wt6p388Mj88vTiLkjjzqWXYeDLc3G0ZB0IHr4tDNZsrpo3SDHyA1ro6QUs9XaokbZ8XVUbnhCB4MTPuAHR6nDb',
 b'eJxVjbsRRDEIAzPTC4qeiyHyK4boVAxFnrhzYCtgZlk+BmCVwrDJKiFic5Ana+7mJAkYUv3ibC6htERiqvJ9kz1dC0H16ydZObF6q/62AlpvVfs4+uzmFNrzaczMFXrSebqYDR/DHUfcfZyNS975AjLSXoc=',
 b'eJxljrsRACEIRDPohY2kGCItxugoxiJv9bzPzL0AeSqzZFa0nLgayZF9aTZMHyM3B/b7jZuI5UuDiHy8Q0yyhbtfCaEqjCGxB1SzsGjp14BqBwu4EnOOWA4DvNaIKCJT6YxmPw1rLbub5zB77t9ffz8BcARJ+g==']

Corresponding length:

[136, 148, 160, 140, 156, 148, 160, 164, 148, 136, 156, 160]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment