PNG 画像を次世代フォーマットに変換・最適化するオールインワンツール
colopresso は、PNG 画像を WebP、AVIF、最適化 PNG へ変換・減色圧縮するための高性能ライブラリ libcolopresso と、その機能を活用した CLI / GUI アプリケーションを提供するオープンソースプロジェクトです。
- 🚀 高速変換 — C99 ベースのネイティブライブラリによる高速処理
- 📦 複数フォーマット対応 — WebP, AVIF, 最適化 PNG (256色, Reduced RGBA32, Limited RGBA4444)
- 🖥️ マルチプラットフォーム — Windows, macOS, Linux に対応
- 🎛️ 柔軟な利用形態 — CLI, Electron アプリ, Chrome 拡張機能, Node.js から選択可能
- ⚙️ プロファイル機能 — フォーマットごとのパラメータを保存・エクスポート・インポート
- 🌐 WebAssembly 対応 — ブラウザや Node.js で動作する WASM ビルドもサポート
git clone --recursive "https://github.com/colopl/colopresso.git"
cd colopresso詳細なビルド手順は ビルドガイド を参照してください。
Important
CLI (ネイティブビルド) および Python Wheel は、x86_64 (amd64) 環境で AVX2 命令セットのサポートが必須です。 2013年以降の Intel Haswell 以降、または AMD Excavator 以降のプロセッサが必要です。 GUI アプリケーション (Electron、Chrome Extension) は WebAssembly を使用するため、AVX2 は不要です。
| フォーマット | モード | 説明 |
|---|---|---|
| WebP | 圧縮 / ロスレス | 広く対応した次世代フォーマット |
| AVIF | 圧縮 / ロスレス | 最高品質の次世代フォーマット |
| PNG | 256色パレット | 256色量子化 (保護色指定あり) |
| PNG | Reduced RGBA32 | ビット深度削減 (8-bit RGBA 出力を維持) |
| PNG | Limited RGBA4444 | RGBA16bit, RGBA4444 でのバンディング対策 |
| PNG | ロスレス | メタデータ削除による最適化 |
| 対応デバイス | 推奨フォーマット |
|---|---|
| iOS 16+ | AVIF (最高品質) |
| iOS 14+ | WebP |
| iOS 14 未満 | PNG |
Note
Android 5.x 以降は常に Chromium (Google Chrome) に依存しているため、すべてのフォーマットがサポートされています。
コンソールで動作する高速コマンドラインツールです。
- ✅ OS レベルのマルチスレッドと CPU 拡張命令を最大限に活用
- ✅ Windows, Linux, macOS で利用可能
- ✅ バッチ処理や CI/CD パイプラインに最適
直感的なドラッグ&ドロップ操作が可能なデスクトップアプリケーションです。
- ✅ フォルダ内のすべての PNG ファイルを一括変換
- ✅ 変換後に元ファイルを自動削除するオプション
- ✅ プロファイル機能でワークフローを効率化
ブラウザ上で動作する軽量な変換ツールです。
- ✅ 変換ファイルを Chrome から直接ダウンロード
- ✅ 複数ファイルを ZIP アーカイブとしてダウンロード可能
Note
公式の Chrome 拡張機能は Chrome ウェブストアでは公開されていません。セルフホストでの利用を推奨します。
Node.js 環境で動作する WASM 版 CLI です。
- ✅ Node.js 18 以降で
colopresso.jsを直接実行可能 - ✅ サーバーサイドでの画像処理に最適
PyPI で公開されている Python バインディングで簡単に統合できます。
- ✅
pip install colopressoでインストール - ✅ WebP、AVIF、最適化 PNG エンコードをサポート
- ✅ CLI 同様の OS ネイティブの高速な処理
- ✅ Windows、macOS、Linux (x64/ARM64) で利用可能
詳細な API ドキュメントは python/README_ja.md を参照してください。
📖 目次
git clone --recursive "https://github.com/colopl/colopresso.git"クローンした colopresso ディレクトリを Visual Studio Code で開き、Dev Containers 拡張機能を使用して Dev Container にアタッチしてください。
Note
SIMD (NEON) を有効にした arm64 上で MemorySanitizer を実行すると、libpng が未初期化メモリの読み取りとしてフラグ付けされる場合があります。現在、MemorySanitizer の実行中は SIMD (NEON) を無効にしています。
Note
i386 / amd64 上で MemorySanitizer を使用しながらアセンブリを有効にすると、libaom で誤検知が発生する場合があります。現在、MemorySanitizer の実行中はアセンブラコードを無効にしています。
Note
マルチスレッドを有効にすると、Rayon の設計により Valgrind / MemorySanitizer が未初期化メモリアクセスやリソースリークを報告する場合があります。これを軽減するための抑制ファイル (suppression files) が提供されています。
| オプション | デフォルト | 説明 |
|---|---|---|
COLOPRESSO_USE_CLI |
OFF | CLI バイナリのビルドを有効にします。COLOPRESSO_WITH_FILE_OPS=ON が必要です。 |
COLOPRESSO_USE_UTILS |
OFF | library/utils/ 以下のコードをビルドします。COLOPRESSO_WITH_FILE_OPS=OFF の場合、自動的に無効になります。 |
COLOPRESSO_USE_TESTS |
OFF | library/tests/ 以下のコードをビルドします。 |
COLOPRESSO_WITH_FILE_OPS |
ON | ファイル I/O API (cpres_encode_*_file) を有効にします。Chrome Extension または Electron ビルドを有効にすると、強制的に OFF になります。 |
| オプション | 説明 |
|---|---|
COLOPRESSO_USE_VALGRIND |
利用可能な場合、Valgrind 統合を有効にします。 |
COLOPRESSO_USE_COVERAGE |
利用可能な場合、gcov カバレッジを有効にします。 |
| オプション | 説明 |
|---|---|
COLOPRESSO_USE_ASAN |
AddressSanitizer を有効にします。 |
COLOPRESSO_USE_MSAN |
MemorySanitizer を有効にします。 |
COLOPRESSO_USE_UBSAN |
UndefinedBehaviorSanitizer を有効にします。 |
- VS Code と Docker (または互換ソフトウェア) をインストールし、リポジトリディレクトリを開きます
- Dev Containers を使用してアタッチします
- 以下のコマンドを実行します:
rm -rf "build" && cmake -B "build" -DCMAKE_BUILD_TYPE=Release \
-DCOLOPRESSO_USE_UTILS=ON -DCOLOPRESSO_USE_TESTS=ON -DCOLOPRESSO_USE_CLI=ON
cmake --build "build" --parallel
ctest --test-dir "build" --output-on-failure --parallel./build/cli/colopressoに CLI バイナリが、./build/utilsにユーティリティバイナリが、./buildにlibcolopresso.aが生成されます
rm -rf "build" && cmake -B "build" -DCMAKE_BUILD_TYPE=Debug \
-DCOLOPRESSO_USE_COVERAGE=ON -DCOLOPRESSO_USE_TESTS=ON
cmake --build "build" --parallel
cmake --build "build" --target coverageカバレッジレポートは ./build/coverage/html/ 以下に生成されます。
rm -rf "build" && cmake -B "build" -DCMAKE_BUILD_TYPE=Debug \
-DCOLOPRESSO_USE_VALGRIND=ON -DCOLOPRESSO_USE_TESTS=ON
cmake --build "build" --parallel
ctest --test-dir "build" --output-on-failure --parallelValgrind オプションの詳細
Valgrind のテストはエンコーダのエンドツーエンド系テストを含むため、CI 環境では非常に時間がかかる場合があります。
| オプション | デフォルト | 説明 |
|---|---|---|
COLOPRESSO_VALGRIND_TRACK_ORIGINS |
OFF | ON にすると --track-origins=yes を付与。非常に遅くなりますが、未初期化値の発生源追跡に有効です。 |
COLOPRESSO_VALGRIND_RAYON_NUM_THREADS |
1 | Valgrind テスト実行時の RAYON_NUM_THREADS を設定します。 |
COLOPRESSO_VALGRIND_LEAK_CHECK |
full | Valgrind の --leak-check を指定します (`no |
COLOPRESSO_VALGRIND_SHOW_LEAK_KINDS |
all | Valgrind の --show-leak-kinds を指定します。 |
例: CI 向け (高速) の Valgrind 実行:
rm -rf "build" && cmake -B "build" -DCMAKE_BUILD_TYPE=Debug \
-DCOLOPRESSO_USE_VALGRIND=ON -DCOLOPRESSO_USE_TESTS=ON \
-DCOLOPRESSO_VALGRIND_TRACK_ORIGINS=OFF -DCOLOPRESSO_VALGRIND_RAYON_NUM_THREADS=1例: 特定のテストのみ実行:
ctest --test-dir "build" --output-on-failure -R '^test_encode_pngx_memory_valgrind$'rm -rf "build" && cmake -B "build" \
-DCMAKE_C_COMPILER="$(command -v clang)" \
-DCMAKE_CXX_COMPILER="$(command -v clang++)" \
-DCMAKE_BUILD_TYPE=Debug \
-DCOLOPRESSO_USE_ASAN=ON -DCOLOPRESSO_USE_TESTS=ON
cmake --build "build" --parallel
ctest --test-dir "build" --output-on-failure --parallel- Homebrew 経由で
cmakeをインストールします (Intel CPU の場合はnasmも) - ターミナルでクローンディレクトリに移動します
- 以下のコマンドを実行します:
rm -rf "build" && cmake -B "build" -DCMAKE_BUILD_TYPE=Release \
-DCOLOPRESSO_USE_UTILS=ON -DCOLOPRESSO_USE_TESTS=ON -DCOLOPRESSO_USE_CLI=ON
cmake --build "build" --parallel
ctest --test-dir "build" --output-on-failure --parallel./build/cli/colopressoに CLI バイナリが、./build/utilsにユーティリティバイナリが、./buildにlibcolopresso.aが生成されます
- VS Code と Docker (または互換ソフトウェア) をインストールし、リポジトリディレクトリを開きます
- Dev Containers を使用してアタッチします
- 以下のコマンドを実行します:
rm -rf "build" && emcmake cmake -B "build" -DCMAKE_BUILD_TYPE=Release \
-DCOLOPRESSO_USE_UTILS=ON -DCOLOPRESSO_USE_TESTS=ON \
-DCOLOPRESSO_USE_CLI=ON -DCOLOPRESSO_NODE_BUILD=ON
cmake --build "build" --parallel
ctest --test-dir "build" --output-on-failure --parallel./build/cli/colopresso.js/colopresso.wasmが生成されます
- VS Code と Docker (または互換ソフトウェア) をインストールし、リポジトリディレクトリを開きます
- Dev Containers を使用してアタッチします
- 以下のコマンドを実行します:
rm -rf "build" && emcmake cmake -B "build" -DCMAKE_BUILD_TYPE=Release \
-DCOLOPRESSO_CHROME_EXTENSION=ON
cmake --build "build" --parallel- 拡張機能のビルド成果物は
./build/chrome以下に配置されます
- Node.js
- Rust nightly
rustup toolchain install nightly rustup component add "rust-src" --toolchain nightly rustup target add "wasm32-unknown-emscripten" rustup target add "wasm32-unknown-unknown"
wasm32-unknown-unknownをサポートする LLVM / Clang- macOS:
brew install llvm
- macOS:
third_party/emsdkと同じタグでインストールされた EMSDKPATH経由でアクセス可能なemcmake/cmake
Note
Electron ビルドではファイル I/O API が自動的に無効になり、メモリ API のみが利用可能になります。
Tip
信頼できる最新の手順が必要な場合は、常に release.yaml を参照してください。
# 1. EMSDK のセットアップ
cd third_party/emsdk
./emsdk install <tag>
./emsdk activate <tag>
source ./emsdk_env.sh
cd ../..
# 2. ビルド
rm -rf "build" && emcmake cmake -B "build" \
-DCOLOPRESSO_ELECTRON_APP=ON -DCOLOPRESSO_ELECTRON_TARGETS="--mac"
cmake --build "build" --config Release --parallel成果物は dist_build/colopresso_macos_gui_{x64,arm64}.dmg に出力されます。
Tip
cmd (コマンドプロンプト) ではなく、常に pwsh を使用してください。
# 1. EMSDK のセットアップ
cd third_party/emsdk
.\emsdk.ps1 install <tag>
.\emsdk.ps1 activate <tag>
. .\emsdk_env.ps1
cd ..\..
# 2. ビルド
rm -rf "build"
emcmake cmake -B "build" -DCOLOPRESSO_ELECTRON_APP=ON -DCOLOPRESSO_ELECTRON_TARGETS="--win"
cmake --build "build" --config Release --parallel成果物は dist_build/colopresso_windows_gui_{x64,arm64}.exe として出力されます。
GNU General Public License v3.0 (GPLv3)
詳細は LICENSE を参照してください。
- Go Kudo g-kudo@colopl.co.jp
- Icon resource designed by Moana Sato
NOTICE を参照してください。
このソフトウェアは、大規模言語モデル (LLM) の支援を受けて開発されました。 すべての設計上の決定は人間によって行われ、LLM によって生成されたすべてのコードは、正確性とコンプライアンスについてレビューおよび検証されています。
このソフトウェアのアイコンおよびグラフィックアセットは、生成 AI を使用せずに作成されました。
assets/ ディレクトリ内のファイルは、Python コードからプログラム的に生成されたテスト用画像です。
使用されたコーディングエージェント:
- GitHub, Inc. / GitHub Copilot
- Anthropic PBC / Claude Code
- Anysphere, Inc. / Cursor
