Update 'palette-gen.js'

This commit is contained in:
sora authored and soraefir committed 2023-06-17 23:41:57 +02:00
1 parent 1563bb0815
commit a1676fc2a0
25 files changed
+48 -15

No files matched your search

+4
View File
@@ -0,0 +1,4 @@
palette.in
palette.out
gifpalette.out
build/
+23
View File
@@ -0,0 +1,23 @@
SRCDIR:= img
DSTDIR:= build
SOURCES := $(shell find ${SRCDIR} -type f -print)
FILES := $(patsubst $(SRCDIR)/%,$(DSTDIR)/%,$(SOURCES))
all: $(FILES)
palette.out: palette.in
node palette-gen.js
builddir:
@mkdir -p build
@mkdir -p build/gif
build/%: img/% builddir palette.out
repalette $< $@ -p $$(cat palette.out) --dither $(DITHER)
build/%.gif: img/%.gif builddir palette.out
gifsicle --use-colormap gifpalette.out < $< > $@
clean:
@rm -rf palette.in palette.out build
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
View File
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

+21 -15
View File
@@ -1,7 +1,7 @@
#!/bin/nodejs
const componentToHex = (c) => ("0" + c.toString(16)).slice(-2);
const rgbToHex = (c) => "#" + componentToHex(c.r) + componentToHex(c.g) + componentToHex(c.b);
const rgbToHex = (c) => componentToHex(c.r) + componentToHex(c.g) + componentToHex(c.b);
const hexToRgb = (hex) => {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
@@ -9,27 +9,33 @@ const hexToRgb = (hex) => {
} : null;
};
const parseScheme = (str) => str.split(",").map(e=>hexToRgb(e))
const parseScheme = (str) => str.replace(/\s+/g, '').split(",").map(e=>hexToRgb(e))
const getTint = (c, w) => Math.round(c + (255 - c) * 1 * w);
const getShade = (c, w) => Math.round(c * w);
const tint = (c, w) => ({r:getTint(c.r,w), g:getTint(c.g,w), b:getTint(c.b,w)});
const shade = (c, w) => ({r:getShade(c.r,w), g:getShade(c.g,w), b:getShade(c.b,w)});
const tint = (c, w) => ({r:getTint(c.r, w), g:getTint(c.g, w), b:getTint(c.b, w)});
const shade = (c, w) => ({r:getShade(c.r, w), g:getShade(c.g, w), b:getShade(c.b, w)});
const tints = (c, w) => Array.from({ length: 100 / w }, (_, i) => tint(c, (i + 1) * w/100));
const shades = (c, w) => Array.from({ length: 100 / w }, (_, i) => shade(c, (i + 1) * w/100));
const tints = (c, w) => Array.from({ length: w }, (_, i) => tint(c, (i + 1)/w));
const shades = (c, w) => Array.from({ length: w }, (_, i) => shade(c, (i )/w));
const genPalette = (c, w=10) => [...tints(c, w).reverse(), Object.assign(c), ...shades(c, w).reverse()];
const genPalette = (c, w=3) => [...tints(c, w).reverse(), Object.assign(c), ...shades(c, w).reverse()];
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
const fs = require("fs");
rl.on('line', (line) => {
console.log(parseScheme(line).map(e=>genPalette(e).map(c=>rgbToHex(c))));
fs.readFile("palette.in", "utf-8", (_, buf) => {
const colors = parseScheme(buf)
.map(e=> genPalette(e, process.env.PALETTE_SIZE).filter(v=>(v.r+v.g+v.b>0)&&(v.r+v.g+v.b<765)))
const hexstr = colors.map(cs=>cs.map(c=>rgbToHex(c)).join(',')).join(',')
const gifstr = colors.map(cs=>cs.map(c=>`${c.r} ${c.g} ${c.b}`).join('\n')).join('\n')
fs.writeFile("palette.out", hexstr, (err) => {
if (err) console.log(err);
});
fs.writeFile("gifpalette.out", gifstr, (err) => {
if (err) console.log(err);
});
});