2022/06/15(水) [n年前の日記]
#1 [cg_tools] 減色ツールについて調べてた
ImageMagick で奇麗に減色できないものか、-ordered-dither の指定の仕方でそれっぽくならないかと試していたのだけど、他の減色ツールではどうなるのかが気になってきた。
そんなわけで、現在でも利用できるツールを使って、フルカラー画像を32色や16色に変換して結果を眺めているところ。 *1
環境は Windows10 x64 21H2。
利用したツールは以下。括弧内は配布ファイル名。
_Padieの詳細情報 : Vector ソフトを探す!
_多摩川ソフトウェア工房 Padie (WebArchive)
_xPadie Pro (WebArchive)
_結社「障泥烏賊ライブラリ」用地
_COLGAのページ
_ずるねこの減色256色にするよ誤差拡散有り低速の詳細情報 : Vector ソフトを探す!
_Color quantizer
_pngnq-s9 download | SourceForge.net
_pngnq - image quantization
_pngquant - lossy PNG compressor
OPTPiX 1.31 だけが有償ソフト。他はフリーソフト。
OPTPiX は無印だった頃に購入したのでバージョンがとんでもなく古い。今はもうプロ用というか企業様御用達のツールになっているので個人で購入する事例はまず無いだろうなと…。公式サイトを眺めたら、6ヶ月間の使用ライセンスで180,000円と書いてあった…。
xPadie、xPadie Pro、Yukari は、減色エンジンが Padie のソレなので、大体似たような変換結果になる印象を受けた。
色々試してみたけれど、やはり OPTPiX の変換結果が優秀に思えた。その次にイイ感じだったのが Padie系。ディザの種類で「アニメーション」を選ぶとドット絵のソレっぽくなるのがイイ感じ。
「ずるねこの〜」は、256色への減色で固定されていたのが残念。任意の色数への減色結果を確認してみたかった…。
Color quantizer は Bayer ディザが選べるので、比較的好みの減色結果になった。
pngquant は、Floyd-Steinberg ディザしか使えないようで、ちょっと残念。
でもまあ、どれを使っても、ImageMagick で減色するより、はるかにイイ感じになるなと…。その点だけは分かった。
_Quantization -- ImageMagick Examples
上記の解説ページによると、ImageMagick の -ordered-dither を使うと使用色は固定されてしまう、と書いてあるように見える。画像によって、どの色がどれだけ使われているのかは異なってくるわけで、本来はその画像の中でよく使われている色を残しつつ減色処理をすることになるのだろうけど、-ordered-dither を指定するとそんなのおかまいなしに決まった色しか使わなくなるので結果は悲惨なことになるのだとか。上記ページの一番下に、そのあたりの解決策のヒントが書いてあるようにも思えるのだけど…。現状では、ちょっと指定を変えるだけで解決できる状態ではない模様。
そんなわけで、現在でも利用できるツールを使って、フルカラー画像を32色や16色に変換して結果を眺めているところ。 *1
環境は Windows10 x64 21H2。
利用したツールは以下。括弧内は配布ファイル名。
- OPTPiX 1.31 (opx131.exe)
- Padie 35 (padie35.zip)
- xPadie 39 (xpadie39.zip)
- xPadie Pro 1.3 (xpadiepro13.zip)
- Yukari 0.998 (Yukari0998.exe)
- Yukari 0.99870 (YukariGUI099870.zip)
- COLGA 030 (colga30.zip)
- ずるねこの減色256色にするよ誤差拡散有り低速 (CQED_VER0112.zip)
- Color quantizer 0.7.4.4 (cq0744.zip)
- pngnq-s9 (pngnq-s9-2.0.1-win32.zip)
- pngquant 2.17.0 (pngquant-windows.zip)
_Padieの詳細情報 : Vector ソフトを探す!
_多摩川ソフトウェア工房 Padie (WebArchive)
_xPadie Pro (WebArchive)
_結社「障泥烏賊ライブラリ」用地
_COLGAのページ
_ずるねこの減色256色にするよ誤差拡散有り低速の詳細情報 : Vector ソフトを探す!
_Color quantizer
_pngnq-s9 download | SourceForge.net
_pngnq - image quantization
_pngquant - lossy PNG compressor
OPTPiX 1.31 だけが有償ソフト。他はフリーソフト。
OPTPiX は無印だった頃に購入したのでバージョンがとんでもなく古い。今はもうプロ用というか企業様御用達のツールになっているので個人で購入する事例はまず無いだろうなと…。公式サイトを眺めたら、6ヶ月間の使用ライセンスで180,000円と書いてあった…。
xPadie、xPadie Pro、Yukari は、減色エンジンが Padie のソレなので、大体似たような変換結果になる印象を受けた。
色々試してみたけれど、やはり OPTPiX の変換結果が優秀に思えた。その次にイイ感じだったのが Padie系。ディザの種類で「アニメーション」を選ぶとドット絵のソレっぽくなるのがイイ感じ。
「ずるねこの〜」は、256色への減色で固定されていたのが残念。任意の色数への減色結果を確認してみたかった…。
Color quantizer は Bayer ディザが選べるので、比較的好みの減色結果になった。
pngquant は、Floyd-Steinberg ディザしか使えないようで、ちょっと残念。
でもまあ、どれを使っても、ImageMagick で減色するより、はるかにイイ感じになるなと…。その点だけは分かった。
_Quantization -- ImageMagick Examples
上記の解説ページによると、ImageMagick の -ordered-dither を使うと使用色は固定されてしまう、と書いてあるように見える。画像によって、どの色がどれだけ使われているのかは異なってくるわけで、本来はその画像の中でよく使われている色を残しつつ減色処理をすることになるのだろうけど、-ordered-dither を指定するとそんなのおかまいなしに決まった色しか使わなくなるので結果は悲惨なことになるのだとか。上記ページの一番下に、そのあたりの解決策のヒントが書いてあるようにも思えるのだけど…。現状では、ちょっと指定を変えるだけで解決できる状態ではない模様。
◎ 減色処理のソースも入手できるらしい。 :
ググっていたら、iZYINS というソースが存在すると知った。
_iZYINS : Color Reducer on .NET Framework Project Top Page - OSDN
こういった研究をする場合は参考になりそう。
また、減色処理について研究を続けている方のブログにも遭遇。少なくとも2015年頃からずっと研究してるらしい。
_画像処理(減色、限定色表示) - ずるやすみねこのリサイズ研究
_作者: zuruneko - Vector
_ZURUYASUMINEKOのホームページ
_減色
_ハーフトーン技術
研究成果の一部については、仕様を限定した状態で Vector で公開されている模様。ソースもブログに貼り付ける形で公開されているけれど、環境も、ビルド方法も分からない…。もっとも、この手の研究をしている方々なら、ソースを眺めれば理解できてしまうものだったりするのかもしれない。
_iZYINS : Color Reducer on .NET Framework Project Top Page - OSDN
xPadieのソースコードを参考にした、.NET FrameworkやMONO上で動作する、C#で書かれた減色プログラムのソースコードを、研究用あるいは教育用にGPLで公開します。iZYINS : Color Reducer on .NET Framework Project Top Page - OSDN より
こういった研究をする場合は参考になりそう。
また、減色処理について研究を続けている方のブログにも遭遇。少なくとも2015年頃からずっと研究してるらしい。
_画像処理(減色、限定色表示) - ずるやすみねこのリサイズ研究
_作者: zuruneko - Vector
_ZURUYASUMINEKOのホームページ
_減色
_ハーフトーン技術
研究成果の一部については、仕様を限定した状態で Vector で公開されている模様。ソースもブログに貼り付ける形で公開されているけれど、環境も、ビルド方法も分からない…。もっとも、この手の研究をしている方々なら、ソースを眺めれば理解できてしまうものだったりするのかもしれない。
◎ コマンドラインツールの形でひとまず作っておくのがベターかもしれない。 :
減色ツールに限らず、png画像の最適化ツールの類についても調べていたけど、海外ではこの手のツールの作り方についてなんだか傾向があるように感じた。
減色処理部分をGUIツールに含める形で作ってしまうと、そこでそのツールは閉じてしまって、たとえ減色処理が優秀であっても、「操作が不便」「複数画像に対して処理ができない」等の理由で敬遠されてしまう ―― そんな気配があるなと。
しかし、減色処理部分をコマンドラインツールとして作っておけば、別の誰かがそのツールを呼び出すGUIのラッパーを作ってくれたりして、減色処理自体の研究と、変換作業時の利便性追求を、切り分けて実装できる。呼んでいるコマンドラインツールが同じなら生成結果も同じになるので、後は使い勝手に注目してラッパーを選べばよい、みたいな状況になる。例えば pngnq や pngquant には、そういった気配を感じた。
このあたり、*NIXの文化なのかなと…。コアになる部分は単機能のツールとして提供しておいて、それらツール群を別の何かで組み合わせて目的を果たす、みたいな。あるいは、不便さを感じたらその時にラッパー書けばいいんじゃね、で済ませていくノリというか。
減色処理部分をGUIツールに含める形で作ってしまうと、そこでそのツールは閉じてしまって、たとえ減色処理が優秀であっても、「操作が不便」「複数画像に対して処理ができない」等の理由で敬遠されてしまう ―― そんな気配があるなと。
しかし、減色処理部分をコマンドラインツールとして作っておけば、別の誰かがそのツールを呼び出すGUIのラッパーを作ってくれたりして、減色処理自体の研究と、変換作業時の利便性追求を、切り分けて実装できる。呼んでいるコマンドラインツールが同じなら生成結果も同じになるので、後は使い勝手に注目してラッパーを選べばよい、みたいな状況になる。例えば pngnq や pngquant には、そういった気配を感じた。
このあたり、*NIXの文化なのかなと…。コアになる部分は単機能のツールとして提供しておいて、それらツール群を別の何かで組み合わせて目的を果たす、みたいな。あるいは、不便さを感じたらその時にラッパー書けばいいんじゃね、で済ませていくノリというか。
*1: どうして32色や16色なのかと言えば、昔の2Dゲーム機って1パレット16色、アーケード基板でも32色とかそんな感じだったので…。昔の2Dゲーム風の画面を再現するなら16色だろう、みたいな。
[ ツッコむ ]
以上、1 日分です。