png-chunk-itxt
Version:
Create or parse a PNG iTXt chunk that stores unicode text data in PNG images
50 lines • 1.95 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.decodeSync = decodeSync;
exports.encodeSync = encodeSync;
const zlib_1 = __importDefault(require("zlib"));
const binary_parser_1 = require("binary-parser");
// http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.iTXt
const iTxtChunkParser = new binary_parser_1.Parser()
.string("keyword", { zeroTerminated: true })
.uint8("compressionFlag")
.uint8("compressionMethod")
.string("languageTag", { zeroTerminated: true })
.string("translatedKeyword", { zeroTerminated: true })
.buffer("text", { readUntil: "eof" });
function decodeSync(data) {
const vars = iTxtChunkParser.parse(data);
const uncompressedTextBuffer = Boolean(vars.compressionFlag)
? zlib_1.default.inflateSync(vars.text)
: vars.text;
return {
keyword: vars.keyword,
compressionFlag: Boolean(vars.compressionFlag),
compressionMethod: vars.compressionMethod,
languageTag: vars.languageTag,
translatedKeyword: vars.translatedKeyword,
text: new TextDecoder().decode(uncompressedTextBuffer)
};
}
function encodeSync(chunk) {
const encoder = new TextEncoder();
const encodedText = encoder.encode(chunk.text);
const compressedTextBuffer = chunk.compressionFlag
? zlib_1.default.deflateSync(encodedText)
: encodedText;
return Buffer.concat([
encoder.encode(chunk.keyword),
Buffer.from([0]),
Buffer.from([Number(chunk.compressionFlag)]),
Buffer.from([Number(chunk.compressionMethod)]),
encoder.encode(chunk.languageTag),
Buffer.from([0]),
encoder.encode(chunk.translatedKeyword),
Buffer.from([0]),
compressedTextBuffer
]);
}
//# sourceMappingURL=index.js.map