UNPKG

png-chunk-itxt

Version:

Create or parse a PNG iTXt chunk that stores unicode text data in PNG images

50 lines 1.95 kB
"use strict"; 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