概要
Image Resizer は、画像のサイズ変更を目的として .NET で構築されたコマンドラインアプリケーションです。バイト単位の目標サイズと出力フォルダーを指定することで、指定した画像のサイズを変更できます。
このツールは、元の画像の見た目を維持することを目的としています。差異は人間の視覚の許容範囲内に収まる想定です。
このツールの出力は、相互相関アルゴリズムを使用した比較テストにおいて、視覚的類似度スコア 90% 以上を目標としています。
Import / Export 連携
サポートされているファイルは、Glasswall Engine の export 機能を使用して処理できます。この機能は、元のドキュメントから抽出されたすべての画像を含む ZIP ファイルを出力します。
この機能により、画像に対してカスタム処理を行い、その後 import 機能を使用して元のドキュメントに再挿入できます。
ただし、連携にあたって注意すべき制限事項がいくつかあります。
- 画像のファイル名を元の名前と異なるものに変更すると、import 処理中に画像をドキュメントへ戻せず、失敗します。
- ファイル名では大文字と小文字が区別されます。
- 画像のファイルサイズが元のサイズを超える場合、import が正常に完了しない可能性があります。
このツールを使用すると、元のファイルサイズ以下の目標サイズに画像をリサイズでき、スムーズな import 処理を実現できます。
使用方法:
gw_image_resizer [options]
オプション:
-i, --in <filename> (REQUIRED) Input file name
-o, --out <filename> (REQUIRED) Output file name
-t, --target <max size in bytes> (REQUIRED) Target maximum output file size
-l, --memory-limit <max memory limit percentage> (OPTIONAL) An optional number that specifies the maximum amount of system memory percent the image resize is limited to [default: 50]
-T, --temp-dir <path> (OPTIONAL) Defines the path to an existing directory where temporary files are created during processing [default: $TMPDIR/.gw-image-resizer]
-?, -h, --help Show help and usage information
--version Show version information
終了コード
| 終了コード | 説明 |
|---|---|
| 0 | 正常にリサイズされたか、ファイルがすでに目標サイズでした |
| 1 | 入力ファイルの目標サイズが 0 未満です |
| 2 | 入力ファイルが見つかりませんでした |
| 3 | 入力ファイルは破損しているか未対応のため、読み込めませんでした |
| 4 | 不明な理由により入力ファイルを読み込めませんでした |
| 5 | 出力パスの一部が存在しません |
| 6 | 不明な理由により出力ファイルを書き込めませんでした |
| 7 | リサイズを試行した際に、magick library で一般的なエラーが発生しました |
| 8 | 目的の目標サイズに到達できませんでした |
| 9 | 予期しないエラー |
| 10 | メモリ制限オプションが 1~100 の範囲内ではありませんでした |
| 11 | 一時ディレクトリのパスが見つかりませんでした |
| 12 | 一時ディレクトリに書き込めませんでした |
一時ディレクトリ
ファイルのリサイズを正常に行うために、処理中に image resizer tool は "$TMPDIR/.gw-image-resizer" または "/tmp/.gw.image-resizer" にある一時ディレクトリを使用する場合があります。これは、既存の書き込み可能なディレクトリに対して、任意のコマンドラインオプション "--temp-dir"(短縮形は "-T")で上書きできます。
注: 一時ディレクトリに書き込み権限がない場合(例: 現在のユーザーに十分な権限がない場合)、画像処理データをキャッシュする必要が生じた時点でアプリケーションは失敗します。運用中の散発的な問題を避けるため、ユーザーがそのディレクトリに書き込めることを事前にテストすることを推奨します。
メモリ制限
デフォルトでは、画像のリサイズに使用されるメモリ割り当てはシステムメモリの 50% に制限されています。これは、任意のコマンドラインオプション "-l" により 1〜100 の値に上書きできます。
サポート
このツールは現在、以下をサポートしています:
- JPEG
- PNG
- BMP
- TIFF(GeoTiff の既知の問題を参照)
- GIF
ImageMagick がサポートするその他のファイルも正しく読み込まれる可能性がありますが、明示的には実装されていません。
リサイズ戦略
サポートされているすべての画像ファイルは、目標サイズに到達するために一連のメソッドを経由します。例:
圧縮品質:
JPEG / JPG ファイルの品質は 25 に設定されています。
PNG ファイルは 100 に設定されています。
その他のファイル形式は変更されませんが、圧縮方式は常に LZW に設定されます。
GIF の最適化
GIF は複数の画像やレイヤーで構成される場合があるため、ファイルサイズを削減するために実施できる最適化があります。
画像の異なるレイヤーのサイズが異なる場合、ファイルサイズを削減するために Image Magick によって最適化が行われます。
それ以外の場合、GIF は Coalesced され、シーケンス内の画像の類似部分を統合してサイズを削減します。
この時点で透明度も最適化され、シーケンス全体で重複するピクセルデータが透明に置き換えられます。
Quantize
その後、すべての画像に Quantize が適用され、色数は 128 に制限されます。すでにこれ未満である場合は値は変更されません。
ダウンスケーリング
目標にまだ達していない場合、画像は達するまでリサイズされます。解像度は元の 95% まで段階的に下げられ、目標に達するか、これ以上解像度を下げられなくなるまで継続されます。
既知の問題
処理により、GeoTIFF のピクセルから位置情報データが削除されることがあります。さらに、通常の TIFF では、グレースケール画像で色が反転する場合があります。
サードパーティ製ライブラリ
| ライブラリ名 | ライブラリのバージョン | 種類 | ライセンス種別 | ライセンス URL | プロジェクト URL | ソース URL |
|---|---|---|---|---|---|---|
| System.CommandLine | 2.0.0-beta4.22272.1 | ライブラリ | MIT | リンク | リンク | リンク |
| System.CommandLine.Hosting | 0.4.0-alpha.22272.1 | ライブラリ | MIT | リンク | リンク | リンク |
| Magick.NET-Q8-AnyCPU | 13.10.0 | ライブラリ | Apache-2.0 | リンク | リンク | リンク |
Glasswall の Image Resizer ツールは、ImageMagick の dotnet ラッパーである "Magick.NET-Q8-AnyCPU" NuGet パッケージを利用しています。
ImageMagick 自体は、デジタル画像の編集および加工に使用される、無料のオープンソースツールです。