@ colorhythm/ exiftool- wasm
与 Exif工具 13.62 (中文(简体) ) · 包装 1.0.7 国家。 。 。 .
Exif工具软件 由WebAssembly提供动力,在浏览器和节点环境中从文件中提取并写入元数据 零点。 。 。 .
安装
npm install @colorhythm/exiftool-wasm
说明
这个软件包提供基于WebAssembly的ExifTool的应用,在浏览器和Node.js环境中都有效. 它能发挥杠杆作用 零点 执行 ExifToo 而不要求任何本地二进制或系统依赖.
使用量
基本用途
import { parseMetadata } from '@colorhythm/exiftool-wasm';
// Browser usage with File API
document.querySelector('input[type="file"]').addEventListener('change', async (event) => {
const file = event.target.files[0];
const result = await parseMetadata(file);
if (result.success) {
console.log(result.data);
} else {
console.error('Error:', result.error);
}
});
写入元数据
import { writeMetadata } from '@colorhythm/exiftool-wasm';
const result = await writeMetadata(file, {
'Author': 'John Doe',
'Title': 'My Photo',
'Keywords': 'nature,photography'
});
if (result.success) {
// result.data contains the modified file as Uint8Array
const modifiedBlob = new Blob([result.data]);
}
提取特定元数据
import { parseMetadata } from '@colorhythm/exiftool-wasm';
const result = await parseMetadata(file, {
args: ['-Author', '-CreateDate', '-Make', '-Model']
});
if (result.success) {
console.log(result.data);
}
JSON 输出
import { parseMetadata } from '@colorhythm/exiftool-wasm';
const result = await parseMetadata(file, {
args: ['-json', '-n'],
transform: (data) => JSON.parse(data)
});
if (result.success) {
// Typed access to properties
console.log(result.data); // { ... }
}
提取嵌入二进制
过 binary: true 作为原始接收 stdout Uint8Array - 所需经费
ExifTool 软件 -b 产出(缩略图/审查、MPF图像和人类发展报告)
增益地图、深度地图、电算中心剖面图、拖车有效载荷),不是UTF-8
并因文本解码而堕落.
import { parseMetadata } from '@colorhythm/exiftool-wasm';
const result = await parseMetadata(file, {
// -m ignores minor warnings, -q suppresses info messages — recommended,
// since any stderr output is treated as failure.
args: ['-b', '-ThumbnailImage', '-m', '-q'],
binary: true,
});
if (result.success) {
const blob = new Blob([result.data], { type: 'image/jpeg' });
// result.data is a byte-exact Uint8Array
}
注释:
transform不应用二进制模式.- 提取多个
-b在一个调用中标记其字节 没有分隔符的 stdout – 提取每个呼叫一个标签, 或使用args: ['-json', '-b', ...](无)binary)将每个标签作为base64:- JSON的前缀字符串.
重要说明
- 在浏览器环境中,通过
File对象直接来自文件输入。 不要将其转换为ArrayBuffer或Uint8Array. - 此软件包使用同步的网络 API 处理文件, 它允许处理文件而不将全部输入加入内存 。 2GB以上的文件不包含在自动放行门;运行时间和格式限制仍然适用.
- ExifTool完全在浏览器或Node.js环境中执行 - 没有为元数据提取提出服务器请求.
API 参考
解析元数据( C)
async function parseMetadata<TReturn = string>(
file: Binaryfile | File,
options: ExifToolOptions<TReturn> = {}
): Promise<ExifToolOutput<TReturn>>
参数
file: 浏览器File对象或一个Binaryfile对象为name财务报告和审定财务报表data属性.options: 元数据提取的配置选项.
写入元数据( C)
async function writeMetadata(
file: Binaryfile | File,
tags: ExifTags,
options: ExifToolOptions = {}
): Promise<ExifToolOutput<ArrayBuffer>>
参数
file: 浏览器File对象或一个Binaryfile对象为name财务报告和审定财务报表data属性.tags: 含有要写入的元数据标记的对象,其中密钥为标记名,而值为标记值.options: 写入操作的配置选项.
返回值
返回承诺 ExifToolOutput 对象 :
type ExifToolOutput<TOutput> =
| {
success: true;
data: TOutput;
error: string;
exitCode: 0;
}
| {
success: false;
data: undefined;
error: string;
exitCode: number | undefined;
};
构建和验证
该套装售出零活口适配器. 其二进制输出和工人修正 (d) 更新不得以 独立零重机软件包.
使用节点24和Bun 1.3.10:
npm ci
bun run build
npm test
build 在发布声明和浏览器无害环境管理前删除先前的输出
捆绑 配对 src/exiftool 财务报告和审定财务报表 src/zeroperl/zeroperl.wasm 输入来自
单笔 零点. 不可改变
运行时间和附带测试修改记录于 release-config.json。 。 。 .
为全面释放验证, 提供取出的官方 ExifToo 源树 其归档校验和已被验证 :
npx playwright install chrome webkit
EXIFTOOL_VERSION=$(node -p "require('./exiftool-build.json').upstream.version")
npm run test:release -- --expected-version "$EXIFTOOL_VERSION" \
--source "/absolute/path/to/Image-ExifTool-$EXIFTOOL_VERSION" \
--output /absolute/path/to/release-evidence
这个包装了实际的 npm 文物, 在节点和浏览器窗口测试它
模块用户环境,并将元数据与本地ExifTool进行比较。 需求
检查包括自定义 -config 标记、 精确的二进制字节、 Unicode 写入/读取,
不变的输入字节,默认的 WASM 资产加载,以及 MacRoman QuickTime 标记.
浏览器自动化覆盖了Chrome和Playwright WebKit. Actually Safari,
Firefox,和超过2GB的文件不是放行门覆盖.
版本身份和自动发布
从自动发布开始,每个npm tarball包括
exiftool-build.json,导出为 @colorhythm/exiftool-wasm/build-info。
记录准确的ExifTool版本,官方源码校验和Git修订版,
Perl版本,构建寄存器修订,工作流程 URL,以及被打包的文件散列.
Npm软件包版本 识别我们的包装 发行与菲尔分开
ExifTool 版本 (英语). 国 际 -ver 返回准确的运行时间版本字符串; JSON
元数据使用数字,并可能投放后缀为零.
私人 释放控制器
启动时23分每小时发出一次检查。 公开发布
工作流程还支持手动发送.
它只有在所有验证通过和存储器后才能自动发布
变量 EXIFTOOL_AUTO_PUBLISH 实值 true准确测试的柏油球已经公布,
然后从 npm 下载,并在创建释放标记前检查。 一个建筑
单凭针头或源头所犯从未被视为出版证明.
见 释放操作 用于激活,回击,出处, 和控制器配置.
承认
这个一揽子计划由三个项目承担,我们感谢:
- Exif工具软件 以 菲尔・哈维 三十年来 他的引擎提供元数据解释.
- 书写/工具 以 安德鲁·桑普森 ——"ExifToo-in-WebAssembly"的原始包装这个 软件包来自forked.
- 零点 (6over3/安德鲁) Sampson)——由沙盒组成的Perl-to-WASI运行时间,使得运行 在浏览器中 ExifToo 完全可能 .
我们的叉子增加了字节安全 二进制取出( O)binary: true),工作范围
支助, -config- 第一次处理和包装修正——见承诺
历史.
许可证
Apache 许可证,2.0版本