bitjs: JavaScript 二进制工具
导言
一套无依赖的JavaScript模块,用于JS中的二进制数据(使用 已键入阵列) (中文(简体) ). 包括:
- bitjs/archive: 在JavaScript中解压缩文件(unzip, unrar, untar, gunzip), 执行为 支持的Web Workers 允许在流畅时进行渐进式无存档.
- bitjs/codecs:在ISO RFC6381 MIME 类型字符串中获取介质容器的编码信息.
- bitjs/file:从二进制签名中检测出文件的类型.
- bitjs/图像:解析GIF,JPEG,PNG. 将WebP转换为PNG或JPEG.
- bitjs/io:用于解释二进制数据的低等类(BitStream, ByteStream). 譬如说, 一次读取或偷看 N 位点.
安装
使用您最喜欢的软件包管理器安装, 软件包注册于 @codedread/bitjs。 。 。 .
npm install @codedread/bitjs
或者说
yarn add @codedread/bitjs
节点常见JS/ESM
这个模块是一个ES模块. 如果您的项目使用 CommunityJS 模块,则使用起来会有点狡猾. 例如,如果一个 TypeScript 工程编译到 CommunityJS , 它将尝试转出导入 输入需要的语句,该语句将中断。 解决这个问题(不幸)是要更新您的 tsconfig.json: (英语)
"moduleResolution": "Node16",
并使用动态导入 :
const { getFullMIMEString } = await import('@codedread/bitjs');
软件包
bitjs.archive (英语)
此软件包包括用于解压和压缩流行存档中的二进制数据的对象 格式(zip、rar、tar、gzip)。 以下是一个简单的例子:
减压
import { Unrarrer } from './bitjs/archive/decompress.js';
const unrar = new Unrarrer(rarFileArrayBuffer);
unrar.addEventListener('extract', (e) => {
const {filename, fileData} = e.unarchivedFile;
console.log(`Extracted ${filename} (${fileData.byteLength} bytes)`);
// Do something with fileData...
});
unrar.addEventListener('finish', () => console.log('Done'));
unrar.start();
详情和实例见 aPI 页面。 。 。 .
bitjs.codecs (英语)
这个包包括处理媒体文件的代码(audio/video). 它有助于得出 ISO RFC6381 MIME类型字符串,包括解码器信息. 目前支持一个有限的子集 mP4和WEBM 组合键.
如何使用 :
- 首先,在您的系统中安装ffprobe(ffmpeg) .
- 然后说:
import { getFullMIMEString } from 'bitjs/codecs/codecs.js';
/**
* @typedef {import('bitjs/codecs/codecs.js').ProbeInfo} ProbeInfo
*/
const cmd = 'ffprobe -show_format -show_streams -print_format json -v quiet foo.mp4';
exec(cmd, (error, stdout) => {
/** @type {ProbeInfo} */
const info = JSON.parse(stdout);
// 'video/mp4; codecs="avc1.4D4028, mp4a.40.2"'
const contentType = getFullMIMEString(info);
...
});
bitjs.file (英语)
此包包括处理文件的代码. 它包括一个嗅探器,它能检测出 file, 给定了 Array 缓冲器 .
import { findMimeType } from './bitjs/file/sniffer.js';
const mimeType = findMimeType(someArrayBuffer);
bitjs.image 图像
这个包包括处理图像文件的代码. 它包括低级别、基于事件 gIF, JPEG 和 PNG 图像的解析器 .
它还包括一个将 WebP 图像转换为 替代光栅图形格式(PNG/JPG),尽管后一模块已贬值,现在 WebP 图像在所有浏览器中都得到了很好的支持.
GIF 解析器
import { GifParser } from './bitjs/image/parsers/gif.js'
const parser = new GifParser(someArrayBuffer);
parser.onApplicationExtension(evt => {
const appId = evt.detail.applicationIdentifier;
const appAuthCode = new TextDecoder().decode(evt.detail.applicationAuthenticationCode);
if (appId === 'XMP Data' && appAuthCode === 'XMP') {
/** @type {Uint8Array} */
const appData = evt.detail.applicationData;
// Do something with appData (parse the XMP).
}
});
parser.start();
JPEG 解析器
import { JpegParser } from './bitjs/image/parsers/jpeg.js'
import { ExifTagNumber } from './bitjs/image/parsers/exif.js';
const parser = new JpegParser(someArrayBuffer)
.onApp1Exif(evt => console.log(evt.detail.get(ExifTagNumber.IMAGE_DESCRIPTION).stringValue));
await parser.start();
PNG 解析器
import { PngParser } from './bitjs/image/parsers/png.js'
import { ExifTagNumber } from './bitjs/image/parsers/exif.js';
const parser = new PngParser(someArrayBuffer);
.onExifProfile(evt => console.log(evt.detail.get(ExifTagNumber.IMAGE_DESCRIPTION).stringValue))
.onTextualData(evt => console.dir(evt.detail));
await parser.start();
WebP 转换器
import { convertWebPtoPNG, convertWebPtoJPG } from './bitjs/image/webp-shim/webp-shim.js';
// convertWebPtoPNG() takes in an ArrayBuffer containing the bytes of a WebP
// image and returns a Promise that resolves with an ArrayBuffer containing the
// bytes of an equivalent PNG image.
convertWebPtoPNG(webpBuffer).then(pngBuf => {
const pngUrl = URL.createObjectURL(new Blob([pngBuf], {type: 'image/png'}));
someImgElement.setAttribute(src, pngUrl);
});
bitjs.io (英语)
此软件包包括用于读取和写入比特和字节级二进制数据的流对象 : BitStream, Byte Stream (英语).
import { BitStream } from './bitjs/io/bitstream.js';
const bstream = new BitStream(someArrayBuffer, true /** most-significant-bit-to-least */ );
const crc = bstream.readBits(12); // Read in 12 bits as CRC. Advance pointer.
const flagbits = bstream.peekBits(6); // Look ahead at next 6 bits. Do not advance pointer.
详情和实例见 aPI 页面。 。 。 .
参考文献
- 解冻: 正在进行中的工作说明 RAR文件格式.
历史
这个项目来自我的另一个项目, kthoom 语录 联合国 浏览器中执行的漫画阅读器). 此寄存器被自动导出 我在GoogleCode上的原始仓库 并经历了 自那时起发生了相当大的变化和改进.