mcpField
I
image-compress-skill

image-compress-skill

github.com/994akクリエイティブ・メディア351 回インストール39 週間前に更新
リポジトリ

image-compress-skill について

写真、グラフィック、Web 用またはアーカイブ用の画像に応じた圧縮方法を AI エージェントに案内するスキルです。WebP と最適化 PNG の手順、セットアップ、出力確認を扱います。

主な機能

  1. 01画像に応じて WebP または PNG を選択
  2. 02写真を非可逆 WebP で圧縮
  3. 03量子化による PNG 最適化
  4. 04可逆最適化オプションに対応
  5. 05サイズ、形式、見た目を確認

活用シーン

  1. 01Web ページ用写真の容量削減
  2. 02ロゴ、アイコン、スクリーンショットの最適化
  3. 03アーカイブ画像の品質保持

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/994ak/image-compress-skill --skill image-compress-skill

インストール後、Claude Code で/image-compress-skillを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
references/
strategy-guide.md
library-knowledge.md
scripts/
install.sh

詳細

ImageCompressSkill

AI エージェント向けのインテリジェントな画像最適化エンジンです。PNG の量子化と WebP 圧縮をスマートに切り替えます。

1. スマートな戦略の概要

最適な圧縮戦略は、入力コンテンツの種類と対象となる用途によって異なります。

コンテンツの種類主な戦略ツールチェーン出力形式
写真非可逆 WebPimage -> libwebp.webp
グラフィック/ロゴ/UI最適化 PNGimage -> imagequant -> oxipng.png
汎用(Web)WebP(高い互換性)image -> libwebp.webp
汎用(アーカイブ)最適化 PNGimage -> oxipng(可逆).png

判断ロジック:

  1. まず WebP を試す(デフォルト): ほとんどの Web 用途では、WebP がサイズと品質の比率に最も優れています(30~90% の削減)。
  2. PNG にフォールバック: 入力が単純なグラフィック(色数が少ない)の場合、または WebP のファイルサイズが大きくなる場合(まれですが、単純な図形では起こります)は、量子化 PNG のパイプラインを使用します。
  3. 品質を厳密に維持: ユーザーが「可逆」または「見た目に変化なし」を求める場合は、量子化をスキップし、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. エージェントの実装ルール

画像圧縮ツールを実装する場合:

  1. デュアルモード対応: 2 つのパイプライン(WebP と PNG)を必ず両方実装します。
  2. スマートなデフォルト値:
    • デフォルトの品質: 80(WebP と ImageQuant の両方)。
    • WebP のデフォルトメソッド: 4。
    • Oxipng のデフォルトレベル: 2(または速度が重要でない場合は 4)。
  3. 出力ロジック:
    • ユーザーが「この画像を圧縮して」と求めた場合 -> 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 を参照してください。以下を処理するリファレンス実装です:

  1. CLI 引数の解析
  2. 画像の読み込み
  3. WebP 分岐(webp クレートを使用)
  4. PNG 分岐(imagequant -> png エンコード -> oxipng)

5. 検証

必ず以下を確認してください。

  1. ファイルサイズ:出力は入力より小さいですか?
  2. 形式:有効な WebP/PNG ですか?
  3. 表示:ブラウザーまたはビューアーで開いてください。

コメント