image-compress-skill について
写真、グラフィック、Web 用またはアーカイブ用の画像に応じた圧縮方法を AI エージェントに案内するスキルです。WebP と最適化 PNG の手順、セットアップ、出力確認を扱います。
主な機能
- 01画像に応じて WebP または PNG を選択
- 02写真を非可逆 WebP で圧縮
- 03量子化による PNG 最適化
- 04可逆最適化オプションに対応
- 05サイズ、形式、見た目を確認
活用シーン
- 01Web ページ用写真の容量削減
- 02ロゴ、アイコン、スクリーンショットの最適化
- 03アーカイブ画像の品質保持
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ 994ak/ image-compress-skill --skill image-compress-skillインストール後、Claude Code で/image-compress-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreferences/strategy-guide.mdlibrary-knowledge.mdscripts/install.sh詳細
ImageCompressSkill
AI エージェント向けのインテリジェントな画像最適化エンジンです。PNG の量子化と WebP 圧縮をスマートに切り替えます。
1. スマートな戦略の概要
最適な圧縮戦略は、入力コンテンツの種類と対象となる用途によって異なります。
| コンテンツの種類 | 主な戦略 | ツールチェーン | 出力形式 |
|---|---|---|---|
| 写真 | 非可逆 WebP | image -> libwebp | .webp |
| グラフィック/ロゴ/UI | 最適化 PNG | image -> imagequant -> oxipng | .png |
| 汎用(Web) | WebP(高い互換性) | image -> libwebp | .webp |
| 汎用(アーカイブ) | 最適化 PNG | image -> oxipng(可逆) | .png |
判断ロジック:
- まず WebP を試す(デフォルト): ほとんどの Web 用途では、WebP がサイズと品質の比率に最も優れています(30~90% の削減)。
- PNG にフォールバック: 入力が単純なグラフィック(色数が少ない)の場合、または WebP のファイルサイズが大きくなる場合(まれですが、単純な図形では起こります)は、量子化 PNG のパイプラインを使用します。
- 品質を厳密に維持: ユーザーが「可逆」または「見た目に変化なし」を求める場合は、量子化をスキップし、
oxipng(PNG)または可逆 WebP のみを使用します。
セットアップ
このスキルには image-compress-tool バイナリが必要です。
ツールが見つからない場合、エージェントは次を実行してください:
./scripts/install.sh
使用方法
1. スマート圧縮(自動)
最適な対象: 写真、複雑なグラデーション、Web アセット。
- 品質(
-q):- 80-85: Web 用の最適な範囲です(見た目では区別できません)。デフォルト。
- 75: 強めの圧縮です。輪郭が鋭い部分にわずかなアーティファクトが現れる場合があります。
- 90+: アーカイブ品質ですが、効果は次第に小さくなります。
- メソッド(
-m):- 4: デフォルトです。バランスに優れています。
- 6: 最も遅いものの、圧縮率が最も高くなります。静的アセット(ビルド時)に使用します。
- 使用方法:
// Rust(webp クレートを使用) let encoder = webp::Encoder::from_image(&img)?; let memory = encoder.encode(80.0); // Q=80
B. 最適化 PNG(imagequant + oxipng 経由)
最適な対象: ロゴ、アイコン、スクリーンショット、線画、透過アセット。
- ステップ 1: 量子化(
imagequant)- 品質:
min=0, max=80(または高忠実度の場合は80-90)。 - 速度:
4(デフォルト)。1(最も遅い/最高品質)。 - 注: このステップでは、32 ビット RGBA を 8 ビットのインデックスカラーに変換します。これは「非可逆」ですが、グラフィックでは視覚的に非常に優れた品質になります。
- 品質:
- ステップ 2: 最適化(
oxipng)- レベル(
-o):- 2: デフォルトです。バランスに優れています。
- 4: 本番ビルドに推奨です(時間はかかりますが、その価値があります)。
- 6: 最大です。非常に時間がかかります。
- メタデータ削除(
--strip safe): メタデータを削除します。 - インターレース(
-i 0): インターレースを無効にします(約 20% 節約できます)。
- レベル(
- 使用方法:
// パイプライン let (palette, pixels) = imagequant_attributes.quantize(img)?; // ステップ 1 let png_data = encode_png(palette, pixels); let optimized = oxipng::optimize_from_memory(&png_data, &options)?; // ステップ 2
3. エージェントの実装ルール
画像圧縮ツールを実装する場合:
- デュアルモード対応: 2 つのパイプライン(WebP と PNG)を必ず両方実装します。
- スマートなデフォルト値:
- デフォルトの品質: 80(WebP と ImageQuant の両方)。
- WebP のデフォルトメソッド: 4。
- Oxipng のデフォルトレベル: 2(または速度が重要でない場合は 4)。
- 出力ロジック:
- ユーザーが「この画像を圧縮して」と求めた場合 -> WebP を出力します(最小サイズ)。
- ユーザーが「この PNG を最適化して」と求めた場合 -> 量子化 PNG を出力します。
- 入力が小さく(< 10KB)、単純な図形の場合 -> WebP と PNG のサイズを比較し、WebP のほうが大きければ PNG を優先します。
4. コードリソース
依存関係のセットアップ
[dependencies]
image = "0.25"
imagequant = "4.4"
oxipng = "10.1"
webp = "0.3"
anyhow = "1.0"
clap = { version = "4.5", features = ["derive"] }
Rust 実装スニペット(「ゴールデンパス」)
現在のプロジェクトにある image-compress-tool/src/main.rs を参照してください。以下を処理するリファレンス実装です:
- CLI 引数の解析
- 画像の読み込み
- WebP 分岐(
webpクレートを使用) - PNG 分岐(
imagequant->pngエンコード ->oxipng)
5. 検証
必ず以下を確認してください。
- ファイルサイズ:出力は入力より小さいですか?
- 形式:有効な WebP/PNG ですか?
- 表示:ブラウザーまたはビューアーで開いてください。
コメント
Markdown 対応