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
|
#!/bin/nodejs
|
||||||
|
|
||||||
const componentToHex = (c) => ("0" + c.toString(16)).slice(-2);
|
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 hexToRgb = (hex) => {
|
||||||
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
||||||
return result ? {
|
return result ? {
|
||||||
@@ -9,27 +9,33 @@ const hexToRgb = (hex) => {
|
|||||||
} : null;
|
} : 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 getTint = (c, w) => Math.round(c + (255 - c) * 1 * w);
|
||||||
const getShade = (c, w) => Math.round(c * 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 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 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 tints = (c, w) => Array.from({ length: w }, (_, i) => tint(c, (i + 1)/w));
|
||||||
const shades = (c, w) => Array.from({ length: 100 / w }, (_, i) => shade(c, (i + 1) * w/100));
|
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 fs = require("fs");
|
||||||
const rl = readline.createInterface({
|
|
||||||
input: process.stdin,
|
|
||||||
output: process.stdout,
|
|
||||||
terminal: false
|
|
||||||
});
|
|
||||||
|
|
||||||
rl.on('line', (line) => {
|
fs.readFile("palette.in", "utf-8", (_, buf) => {
|
||||||
console.log(parseScheme(line).map(e=>genPalette(e).map(c=>rgbToHex(c))));
|
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