
「生成 AI で作成した」画像のサイズ削減
普通の画像のサイズ削減については、ネットに情報が沢山あります。ただ、生成 AI が作成した画像のサイズ削減については、パッと検索した限りではあまり見当たらなかったので、簡単に書いてみようと思います。
「え?生成 AI で作成した画像でも普通の画像でも、サイズ削減方法なんて変わらないでしょ?」
と思うかもしれません。もちろん、普通の画像のサイズ削減方法は、生成 AI で作成した画像に対しても使えます。ただ、生成 AI で作成した画像は、普通の画像とちょっと違った特徴があるのです。
おさらい: 普通の画像のサイズ削減方法
普通の画像の場合、サイズ削減方法としては以下のようなものがあります。
- 解像度を下げる
- JPEG の圧縮率を上げる、使用している色数を削減する
- WebP 等、効率の良いファイル形式に変換する
- アルファチャンネルを削除する
他にもあったかもしれませんが、本題ではないので省略します。
生成 AI による画像の特徴
「生成 AI で作成した画像のサイズ削減」について説明する前に、生成 AI で作成した画像の特徴を説明します。
生成 AI による画像生成は拡散モデル (Diffusion Model) というものを使っています(※)。私は専門外なので詳しくは文献なりネットを調べてもらうとして、簡単に言うとノイズから画像を復元するというプロセスになります。(ノイズというのはイメージで言うと、昔のテレビで深夜に流れていた砂嵐のようなものと思ってもらえれば良いと思います。)
※: 正確には、全ての画像生成が diffusion model を使っているわけではないようです。詳しくは検索してください。
そのため、背景を完全な白(#FFFFFF)で塗りつぶすみたいな、数学的に厳密な値を生成することが苦手で、微妙に違う色(#FFFFFE, #FEFFFE 等)が混じります。プロンプトで “pure white background” とか指定してもその通りになりません。
PNG のような可逆変換のファイル形式では、微妙に違う色が沢山使われていればその分ファイルサイズが大きくなります。

生成 AI による画像のサイズ削減
ここまで書けばほぼ分かるかと思いますが、完全な白に見えて微妙に違う色を完全な白に変換してしまえば、サイズは大きく削減できます。具体的には ImageMagick を使えば1行で出来ます。
magick original.png -white-threshold 95% size-reduced.png
95%のところは適宜調整してください。
また、白背景以外であれば以下のようなコマンドです。-fill と -opaque は背景色を指定します。-fuzz の5%も適当に調整してください。上のコマンドの95%が下のコマンドの5%と同じ意味です。
magick original.png -fuzz '5%' -fill "#000000" -opaque "#000000" size-reduced.png
結果
↓こちらが元画像で、1.2MBです。(本サイトの仕組みで自動的に画像が圧縮されていたらすみません。後で差し替えます。)
↓こちらが白背景を純粋な白で塗りつぶしたもので、347KBです。
見た目の違いはほぼ分からないかと思いますし、仮に気づいたとしても、純粋な白で塗りつぶした方がすっきり見えるはずです。
まとめ
生成 AI による画像生成は、拡散モデル(Diffusion Model)というものを使っている都合上、厳密な色を指定して背景を埋め尽くすといった処理は苦手です。そのため、生成された画像のサイズは大きくなりがちです。サイズ削減のためには、微妙に違う色で塗りつぶされている個所を同じ色で塗り直すという作業が効果的で、ImageMagick を使えばコマンド1行で出来ます。
本投稿のアイキャッチ画像は白背景の部分と下の薄水色の帯の2つが大きな面積を占めていたため、コマンドを2回流して画像サイズを削減しました。こうした処理は数行の単純なスクリプトでは出来ないので、画像関係のライブラリを使って塗り直すべき色をプログラムで自動で抽出するとか生成 AI にその判断をさせるとかが必要です。その辺りをもしやるときには、またブログ記事にしようと思います。

