emotionサイトトップ >C#/.NET初心者メモ
emotionサイトトップ >
C#/.NET初心者メモ >8bitのPNGへ変換するには
24bitまたは32bitのPNGを8bitのPNGにエンコードするには・・・
結論から言うと簡単に出来ない。
α付きのPNGは他画像ファイルと比べて構造が想像以上に複雑なので、これをやったら簡単に変換できるものは無い。
参考ブログ:Convert 32 bit PNGs to high quality 8 bit PNGs with C#
http://www.hurryupandwait.io/blog/convert-32-bit-pngs-to-high-quality-8-bit-pngs-with-c
頻繁に変換する必要が無い人はフリーソフトのIrfanViewを使って一括変換を実行すれば良いのですが、
頻繁に変換したり、更新時間が新しい物だけ変換したいアプリを自作したい人は違う方法を検討した方がタイパが良い。
一応EncoderParameterを使えばtiffファイル限定で8bit色深度へエンコードする事は可能。
https://learn.microsoft.com/ja-jp/dotnet/api/system.drawing.imaging.encoder.compression?view=netframework-4.8
ただし、IrfanViewで8bit-PNG変換した画像と比べると遥かに品質が悪い。
8bitのtiffへエンコードしてから、それをpngへエンコードすると一応8bit色深度のpngファイルは作成出来るもののかなり品質が悪い。
αが不要なら無理にpngを使わずに大人しくjpgを使った方が無難。
私が8bit-PNGを使用したかった理由は、jpgでファイルサイズを減らす為に低品質へ変換したら、文字が潰れて見え難くなってしまったので、8bit-PNGを使っていたのですが、自前アプリでjpgエンコードで文字が潰れないギリギリの品質へ一括変換するものを作ったら、8bit-PNGと同じファイルサイズになる事が分かったので、jpgを使う事にしましたw
ちなみにjpgの品質は60程度が無難。
50にすると文字がボヤけ始める。
40にするとノイズが入る。