Update 'palette-gen.js'
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,4 @@ | |||||||
|  | palette.in | ||||||
|  | palette.out | ||||||
|  | gifpalette.out | ||||||
|  | build/ | ||||||
							
								
								
									
										23
									
								
								Makefile
									
									
									
									
									
										Normal 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 | ||||||
|  |  | ||||||
|  | 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 buildsha256-SDBYfjcax0XxVZcDRe5kCcPUOWaserg7v+wX747TwF8= | ||||||
| Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB | 
| Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.7 MiB | 
| Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 2.1 MiB | 
| Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 2.1 MiB | 
| Before Width: | Height: | Size: 2.6 MiB After Width: | Height: | Size: 2.6 MiB | 
| Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 2.5 MiB | 
| Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.3 MiB | 
| Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.3 MiB | 
| Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB | 
| Before Width: | Height: | Size: 2.4 MiB After Width: | Height: | Size: 2.4 MiB | 
| Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.3 MiB | 
| Before Width: | Height: | Size: 959 KiB After Width: | Height: | Size: 959 KiB | 
| Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB | 
| Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.7 MiB | 
| Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB | 
| Before Width: | Height: | Size: 2.6 MiB After Width: | Height: | Size: 2.6 MiB | 
| Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.3 MiB | 
| Before Width: | Height: | Size: 2.8 MiB After Width: | Height: | Size: 2.8 MiB | 
| Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.7 MiB | 
| Before Width: | Height: | Size: 2.9 MiB After Width: | Height: | Size: 2.9 MiB | 
| Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 2.1 MiB | 
							
								
								
									
										
											BIN
										
									
								
								img/gif/pond.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 231 KiB | 
| @@ -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,13 +9,13 @@ 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: 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 shades = (c, w) => Array.from({ length: 100 / w }, (_, i) => shade(c, (i + 1) * w/100)); | ||||||
| @@ -23,13 +23,22 @@ const shades = (c, w) => Array.from({ length: 100 / w }, (_, i) => shade(c, (i + | |||||||
| const genPalette = (c, w=10) => [...tints(c, w).reverse(), Object.assign(c), ...shades(c, w).reverse()]; | const genPalette = (c, w=10) => [...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)))); |     console.log(buf) | ||||||
|  |     const colors = parseScheme(buf) | ||||||
|  |     .map(e=>{ | ||||||
|  |         console.log(e) | ||||||
|  |         return genPalette(e)}) | ||||||
|  |     console.log(colors) | ||||||
|  |     const hexstr = colors.map(cs=>cs.map(c=>rgbToHex(c))).join(',') | ||||||
|  |     const gifstr = colors.map(c=>`${c.r} ${c.g} ${c.b}`).join('\n') | ||||||
|  |  | ||||||
|  |     fs.writeFile("palette.out", hexstr, (err) => { | ||||||
|  |         if (err) console.log(err); | ||||||
|  |     }); | ||||||
|  |     fs.writeFile("gifpalette.out", gifstr, (err) => { | ||||||
|  |         if (err) console.log(err); | ||||||
|  |     }); | ||||||
| }); | }); | ||||||
|   | |||||||