私は過去にフロイド-スタインバーグディザリングを実装しましたが、それだけの価値はありませんでした。
圧縮に適したディザリングが必要だと思います。 私たちを助けてくれる人を知っていますか?
pngquantは、色の処理を改善するために修正されたフロイド-スタインバーグを使用します。
ディザリングはランダムな性質があるため、常にファイルサイズが大きくなると思います。
この機能の唯一の目的—私たちの目を楽しませること。
Psの場合と同様に、ディザリングはフラグの下に隠すことができます。 ユーザーが決定します。
圧縮に適したディザリングが必要だと思います。 私たちを助けてくれる人を知っていますか?
@kornelskiに聞いてもいいと思います。
つまり、3つのバージョンの画像を作成しました。
BはCと同じように見栄えがしましたが、少し大きかったので、ディザリングよりも多くの色を許可する方が良いと思いました(どちらもファイルサイズを大きくします)。
いくつかの反復パターンで構成されるディザリングが必要だと思います。つまり、Deflateアルゴリズムに「適している」必要があります。BのkBは20 kBだけにします(したがって、Cと同じくらい良いですが、小さくします)。
ところで。 また、pngquantはより優れたDeflateを実行すると思います(これもUPNG.jsの約100倍の時間がかかります:たとえば30ms対3000ms)。そのため、私と同じディザリングを使用しながら、BのkBを20kBにすることができます。
ああなるほど。
このケースを処理できるディザリングアルゴリズムがわかりません。
pngquantは、mseエラーを計算し、最小および最大の品質設定を行い、サイズが大きすぎる場合や品質が大幅に低下する場合はファイルを書き込みません。
たぶんあなたはこのスレッドが役に立つと思うでしょう
https://encode.ru/threads/1757-Lossy-DEFLATE-lossy-PNG
そしてこのプロジェクトは特に
https://github.com/foobaz/lossypng
はい、pngquantは平均二乗誤差を計算し、誤差の大きい領域にのみディザリングを適用します。 このようにして、ディザリングを必要としない領域に余分なノイズが発生することはありません。
pngquantは、エッジ検出(Prewittアルゴリズムと同様)も実行し、エッジでのディザリングを無効にします。 これにより、アンチエイリアシングが毛皮のように見えるのを防ぎます。
pngquantでは、時間の90%がK-meansの追加の実行に費やされます。 --speed 10
を使用する場合、再圧縮全体(i7 2.3Ghzで)はディザリングされてから最大80ミリ秒、ディザリングされていない状態で50ミリ秒かかります。
(ところで、TinyPNGには独自のアルゴリズムがありません。これはpngquantのGUIにすぎません)。
最も参考になるコメント
はい、pngquantは平均二乗誤差を計算し、誤差の大きい領域にのみディザリングを適用します。 このようにして、ディザリングを必要としない領域に余分なノイズが発生することはありません。
pngquantは、エッジ検出(Prewittアルゴリズムと同様)も実行し、エッジでのディザリングを無効にします。 これにより、アンチエイリアシングが毛皮のように見えるのを防ぎます。
pngquantでは、時間の90%がK-meansの追加の実行に費やされます。
--speed 10
を使用する場合、再圧縮全体(i7 2.3Ghzで)はディザリングされてから最大80ミリ秒、ディザリングされていない状態で50ミリ秒かかります。(ところで、TinyPNGには独自のアルゴリズムがありません。これはpngquantのGUIにすぎません)。