コンテンツにスキップ
EN / JA

はじめに

C ネイティブ画像処理エンジンを TypeScript API / CLI から利用するライブラリです。JPEG / PNG / WebP / AVIF / GIF / HEIC をデコードし、Lanczos-3 リサイズを経て WebP / AVIF / PNG にエンコードします。Node.js / Bun / Deno に対応します。

ブラウザ向けの zenpix-wasm は、RGB / RGBA 生ピクセルからの AVIF encode 専用です。ネイティブ版の decode、resize、CLI は含みません。


Node.js / Bun(サーバーサイド)

Terminal window
npm install zenpix

ESM 専用パッケージです。package.json"type": "module" が必要です。CommonJS(require)は非対応です。

Deno

Terminal window
deno add npm:zenpix

または直接 npm: specifier を使用:

import { decode, encodeAvif } from "npm:zenpix/deno";

通常利用では--allow-ffiと入力ファイル用の--allow-readが必要です。optionalなZENPIX_LIB上書きを使う場合だけ--allow-env=ZENPIX_LIBを追加します。

ブラウザ / Cloudflare Pages(WASM)

Terminal window
npm install zenpix-wasm

詳細はブラウザ(WASM)を参照してください。


インストール済みバージョンの確認

Section titled “インストール済みバージョンの確認”
Terminal window
# ネイティブ
npx zenpix --version
npm list zenpix
# WASM
npm list zenpix-wasm

import { decode, resize, encodeAvif } from "zenpix";
import { readFileSync, writeFileSync } from "fs";
const image = decode(readFileSync("photo.jpg"));
const resized = resize(image, { width: 1920, height: 1080, fit: "cover" });
const avif = encodeAvif(resized, { quality: 60, threads: 4 });
if (avif) writeFileSync("output.avif", avif);

convert() でパイプラインをワンライナーに:

import { convert } from "zenpix";
import { readFileSync, writeFileSync } from "fs";
const result = convert(readFileSync("photo.jpg"), {
resize: { width: 1920, height: 1080, fit: "cover" },
encode: { format: "avif", quality: 60 },
});
if (result) writeFileSync("output.avif", result);

機能内容
デコードJPEG / PNG / WebP / AVIF / GIF(先頭フレーム)
リサイズscalar 2-pass Lanczos-3、fit モード(stretch / contain / cover)
エンコードWebP / AVIF(threads 指定可)/ PNG
CLInpx zenpix(バッチ・stdin/stdout 対応)
RGBA背景除去・角丸・白背景合成
パイプラインconvert() で decode → crop → resize → encode を一発実行

処理時間はCPU、スレッド数、画像の特徴、解像度、依存ライブラリによって変わります。過去の測定には、少コアVPSの一部画像でzenpixが速い結果と、Macや別種の画像でSharpが速い結果の両方があります。

再配布可能なfixtureがない数値は一般性能の根拠には使用しません。条件と制約はベンチマークを参照してください。