Files
2024-06-27 00:11:13 -05:00

44 lines
1.1 KiB
JavaScript

const { PNG } = require("pngjs");
const {Encoder, Decoder} = require('./')
const fs = require("node:fs");
const pngFile = fs.readFileSync("raw.png");
const pngData = PNG.sync.read(pngFile);
const sampleBits = pngData.depth
const codeBits = sampleBits - 2
const encoders = {
red: new Encoder(sampleBits,codeBits),
green: new Encoder(sampleBits,codeBits),
blue: new Encoder(sampleBits,codeBits)
}
const decoders = {
red: new Decoder(sampleBits, codeBits),
green: new Decoder(sampleBits, codeBits),
blue: new Decoder(sampleBits, codeBits)
}
for (var y = 0; y < pngData.height; y++) {
for (var x = 0; x < pngData.width; x++) {
var idx = (pngData.width * y + x) << 2;
// invert color
const rawRed = pngData.data[idx]
const rawGreen = pngData.data[idx + 1]
const rawBlue = pngData.data[idx + 2]
pngData.data[idx] = decoders.red.decode(encoders.red.encode(rawRed))
pngData.data[idx+1] = decoders.green.decode(encoders.green.encode(rawGreen))
pngData.data[idx+2] = decoders.blue.decode(encoders.blue.encode(rawBlue))
}
}
const out = PNG.sync.write(pngData)
fs.writeFileSync('./out.png', out)