Update 'palette-gen.js'
This commit is contained in:
1 parent
1563bb0815
commit
a1676fc2a0
25 files changed
+48
-15
No files matched your search
@@ -0,0 +1,4 @@
|
||||
palette.in
|
||||
palette.out
|
||||
gifpalette.out
|
||||
build/
|
||||
@@ -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.
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.
Binary file not shown.
|
After Width: | Height: | Size: 231 KiB |
+21
-15
@@ -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);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user