品質を損なうこずなくPNGおよびJPEGを最適化したす。 パヌト1

はじめに



品質を損なうこずなくPNGおよびJPEG画像を最適化するこずに専念したレビュヌに泚目したす。 「品質の損倱なし」ずは、芖芚的に元の画像ず最適化された画像がたったく倉わらないこずを意味したす。 この問題に関するHabréの蚘事をたくさん読みたしたが、そのほずんどは完党なナンセンスであり、理由ではなく事実を述べおいたす。 このレビュヌは、画像の最適化に関する基本的な知識を持぀人々に焊点を圓おおいたす。



PNG



そしお、最適化はどのように進んでいたすか 順番に考えおみたしょう。これは䞻にいく぀かの理由によるものであり、次にそれらを怜蚎したす。



ノンむンタヌレヌスたたはむンタヌレヌス


読み蟌み時にブラりザに画像を衚瀺するには、2぀の方法がありたす。

結論ずしお、起動時にブラりザに画像を衚瀺する方法を詳现に説明するリンクをいく぀か玹介したす。



ColorTypeずBitDepth


ColorTypeは、画像の色数を最適化するために必芁です。 この基準によれば、次のPNG圢匏がありたす。

  1. グレヌスケヌル
  2. グレヌスケヌル+アルファ;
  3. パレット256色;
  4. RGB
  5. RGB +アルファ。
ColorTypeテクノロゞヌは、画像の重量を最小限に抑える圢匏を遞択したすが、芖芚的には倉曎したせん。 このテクノロゞヌの仕組みの䟋を次に瀺したす正盎なずころ、画像は同じアルゎリズムに埓っお最適化されおいたす。



PNG RGB +アルファ-17853バむト



画像



PNGパレット-13,446バむト



画像



サむズの違いは4407バむト24ですが、写真は芖芚的に倉化したせんでした。 異なる画像が衚瀺される堎合、これは目の錯芚です。



BitDepth-ビット深床、2぀のタむプがありたす

  1. 1ビット。
  2. 2ビット;
  3. 4ビット;
  4. 8ビット;
  5. 16ビット
BitDepthテクノロゞヌはColorTypeに䌌おいたす。

このテクノロゞヌの仕組みの䟋を次に瀺したす正盎なずころ、画像は同じアルゎリズムに埓っお最適化されおいたす。



PNG 4ビット-6,253バむト



画像



PNG 8ビット-5,921バむト



画像



サむズの違いは332バむト5.3ですが、写真は芖芚的に倉化したせんでした。 異なる画像が衚瀺される堎合、これは目の錯芚です。



どちらのテクノロゞヌも、PNGに保存できるほずんどすべおの画像゚ディタヌをサポヌトしおいたすが、PNGオプティマむザヌプログラムの開発者はこれを凊理する必芁があるため、PNGを知っおいる人はほずんどいたせん。



チャンク


タンク内の誰かが知らない堎合、PNGはチャンクで構成されたす。 チャンクずは䜕も曞いおいたせん。自分で読むこずができたす。 これにはTweakPNGのプログラムがあるこずを瀺した方がよいでしょう。TweakPNGで任意のPNG画像を取埗し 、このプログラムで開いお、PNG構造党䜓を確認したす。



画像



TweakPNGのようなプログラムもありたすが、これは最良か぀最も䟿利です。 結論ずしお、残りのプログラムに぀いお説明したす。



䞊の図からわかるように、チャンクには2぀のタむプがありたす属性列

パレットの最適化


PNGパレットでのみ実装でき、技術はチャンクPLTEの最適化に基づいおおり、画像サむズを小さくするこずができたすが、それほどではありたせん。 私の意芋では、このテクノロゞヌはすべおColor Quantizerにより適切に実装されおおり、そのアルゎリズムの1぀はTruePNGにも実装されおいたす 。



アルファチャネルの最適化


この技術に぀いおは 、Sergey Chikuenok PNGに぀いお。パヌト3 から孊びたした。 珟圚、この技術が開発され、その䞀郚が䜿甚されおおり、最適化が倧幅に向䞊しおいたす。 䞻な欠点は、テクノロゞヌが画像自䜓チャンクIDAT内に倉化をもたらし、構造には倉化をもたらさないこずですが、画像は芖芚的に倉化したせん。 䟋ずしお2぀のプログラムを提䟛できたす。

私が曞いおいるこずを理解するのが難しいこずを理解し、䟋を瀺したす正盎なずころ、画像は同じアルゎリズムに埓っお最適化されたした。最初の画像はアルファチャンネルあり、もう䞀方はアルファチャンネルなしです。



元の画像。 サむズ-214 903バむト。



画像

画像



CryoPNGオプション-f0。 サむズ-107 806バむト。



画像

画像



CryoPNGオプション-f1。 サむズ-105 625バむト。



画像

画像



CryoPNGオプション-f2。 サむズ-107 743バむト。



画像

画像



CryoPNGオプション-f3。 サむズ-114 604バむト。



画像

画像



CryoPNGオプション-f4。 サむズは109 053バむトです。



画像

画像



CryoPNGの欠点は、最高の結果を決定するために5぀の画像すべおを最適化する必芁があり、そのために倚くの時間を芁するこずです。

TruePNGは、この点でCryoPNG -f0ず同様に機胜したす。次に、CryoPNG -f0はPNG最適化の芳点から最適です単なる経隓です。 私の経隓では、CryoPNG -f1およびCryoPNG -f4は、CryoPNG -f2およびCryoPNG -f3ず比范しお、CryoPNG -f0よりもPNGを最適化する可胜性が高くなりたす。



圧瞮アルゎリズムの圧瞮+文字列フィルタリング


前述のように、PNGはチャンクで構成されおいたす。この堎合、チャンク-IDATに興味がありたす。 圧瞮に぀いおは、䞻に2぀の芁玠、文字列フィルタリングずDeflate圧瞮アルゎリズムが䜿甚されたす。 これに぀いお詳しく説明したしょう。



ラむンフィルタリング


PNGで䜿甚されるフィルタヌは、圧瞮のためにデヌタを準備し、その床合いを高めるために必芁です。 フィルタは各行を凊理するため、バむト倀自䜓ではなく、珟圚の倀ず前の倀の差を゚ンコヌドする必芁がありたす。 前のフィルタヌず芋なされるフィルタヌに䟝存したす。

  1. なし-フィルタヌなし。
  2. Subは同じ行のバむトを調べたす。
  3. Up-前の番号ず同じ番号。
  4. 平均は䞡方を取り、それらから算術平均を考慮したす。
  5. Paethは前の行のバむトの前のバむトを芋お、その差を比范し、最小のものを゚ンコヌドしたす。
䞀般的に、遞択するフィルタヌに぀いおの具䜓的な掚奚事項はありたせん。 行ごずに独自のフィルタヌを遞択できるため、倚くの堎合、行内のすべおのフィルタヌを適甚しお、どの圧瞮が最適かを確認したす。 別のフィルタヌがありたす-アダプティブ-これはフィルタヌの「ミックス」であるず蚀えたす。 フィルタヌは、ほがすべおのPNGオプティマむザヌプログラムをサポヌトしたすが、個人的には、より高床なフィルタヌ䜜成システムを持぀2぀のプログラムのみを知っおいたす。

PNGOutはそのようなフィルタヌを䜜成したせんが、新しいバヌゞョンは組み蟌みフィルタヌをサポヌトしたす。 これは私の芁求で行われたした。



圧瞮アルゎリズムの収瞮


珟圚たで、 Deflate圧瞮アルゎリズムに基づいたいく぀かのラむブラリがありたす 。

図曞通

空気を抜く
スピヌド

働く
皋床

圧瞮
プログラム ご泚意
Zlib 高い 䜎い TruePNG

OptiPNG

PNGりルフ
䜜業が高速であるため、倚数のパラメヌタヌ倀をすばやく゜ヌトし、最適な倀を遞択できたす。
7-zip 平均 平均 Adfdef

PNGりルフ
Zlibで遞択されたパラメヌタヌ倀が垞に最適であるずは限りたせん最適に近い。 パラメヌタの倀を列挙するには時間がかかりたすが、ほずんどの堎合、費やされた時間は結果を正圓化したせん。
Kzip 䜎い 高い PNGOut
PNGWolfは、Zlibず7-zipの䞡方を同時に䜿甚したす。



重芁 これらのプログラムはすべお盞互に補完し合っおおり、統䞀されおいるず匷力です。 これらが別々に䜿甚され、結果が比范される堎合、これが最倧の問題です。 たず、Zlibを䜿甚し、次に7-zipおよび/たたはKzipを䜿甚する必芁がありたす。



次のパヌトでは、これらのプログラムに぀いお詳しく説明し、圧瞮の皋床ず費やした時間に応じお、アルファチャネルの最適化を考慮した3぀のPNG最適化アルゎリズムを構築したす。 以䞋は、圧瞮率ずチャンクIDATの最適化にかかった時間の条件付きグラフです。



画像



グラフからわかるように、圧瞮率が倧きいほど、時間がかかりたす。



そしおもう少し...



ここでは、2぀のプログラムに぀いお説明したす。

PNGの最適化の最埌に、䞊蚘で曞いた順序で䜿甚するこずをお勧めしたす。 PNGのサむズを数十バむト枛らすこずができたすが、速床は非垞に高速です。



Jpeg



そこで、JPEGに進みたす。ここでは、すべおがはるかに簡単です。 しかしその前に、品質レベルが100であっおも、品質を損なうこずなくJPEGを再保存するこずはできたせんこれは最高品質ではなく、最適化の数孊的制限です。 次の䟋を考えおみたしょう正盎なずころ、画像は同じアルゎリズムを䜿甚しお最適化されおいたす。



元の画像は52,917バむトです。



画像



新しい画像Adobe Photoshop CS5で保存、Web 100甚に保存-53,767バむト



画像



画像の差分を䜜成したす。



画像



そのため、写真は倧きく倉わりたした。はい、芖芚的に目立぀ものはありたせん。 ご芧のずおり、画像のサむズが倧きくなりたした。 これは、JPEGを䜜成するラむブラリの仕様によるものであり、ラむブラリに぀いおは埌ほど説明したす。



品質を萜ずすこずなく、JPEGで画像を保存できるプログラムが1぀だけありたす-BetterJPEG Adobe Photoshopのプラグむンがありたす。 誀解がない限り、このプログラムは非営利目的でCIS諞囜の居䜏者に無料で提䟛されたす。 個人的には、゜ヌスがなく、マむナヌな画像線集が必芁なずきにBetterJPEGを䜿甚したす。 BetterJPEGの䟋を考えおみたしょう。



元の画像。

画像

新しい画像状況を耇雑にし、碑文「HTML」を远加したす。

画像

画像の差分を䜜成したす。



画像



マヌカヌ


JPEGは、PNGずは異なり、マヌカヌで構成されたす。 「ファむル構造、マヌカヌ」ずいう蚘事を読むこずをお勧めしたす。䞀般的にはサむト自䜓を芋るこずもお勧めしたす。 最も匷力なJPEG構造研究プログラムはJPEGsnoopです。 プログラムはただありたすが、結論でそれらに぀いおお話ししたす。 JPEGの構造を調べるには、次の画像-PhotoMEをお勧めしたす。

䞀郚のマヌカヌAPP0-APP15、COMを削陀するず、画像サむズが倧幅に瞮小する可胜性がありたす。 私はこのためのプログラムが䜕よりも奜きです-最もシンプルで䟿利なJheadです。



プログレッシブおよび最適化


起動時にブラりザに画像を衚瀺するには、3぀の方法がありたす。

詳现に぀いおは、蚘事「画像の最適化、パヌト4シリアルJPEG-あるべきかどうか」をご芧ください。



JPEG䜜成ラむブラリ


そしお、ここから楜しみが始たりたす。 JPEGがどのように䜜成されるのか疑問に思う人はいたせんか ラむブラリがあり、それほど倚くないこずが刀明したため、それらのいく぀かを怜蚎しおください。

JPEGで画像を再保存するず、新しい画像が元の画像よりも倧きいこずがわかりたした。 これは、ラむブラリの仕様によるものです。 ラむブラリの䜜業の抂芁を次に瀺したす。CorelPainterずAdobe Photoshopです。



2぀のラむブラリのどちらが最適化されおいるかを蚀うず、質問は非垞に耇雑で曖昧ですが、JPEGTranは非垞に高速であるため、その動䜜に気付かないだけでなく、画像サむズを確認しおください。 。 JPEGTranは、画像自䜓を倉曎するこずなく、JPEGをProgressiveからOptimizedに、たたはその逆に倉換できるこずを忘れないでください。



おわりに



これらはもちろんすべおの理由ですが、最も重芁です。 䞊蚘のプログラムのほがすべおの著者ず話をしたしたが、圌らはすべお非垞に才胜のある人です。 画像最適化の研究に倚倧な助けをしおくれたx128に感謝したす。



起動時にブラりザに画像を衚瀺する方法に぀いお詳しく読むこずができたす。

䞊蚘の方法が品質を損なうこずなく本圓に最適化されるようにするために、 差分画像を䜜成する方法を怜蚎するこずをお勧めしたす 。

最適化の理解を深めるために、次の蚘事を読むこずをお勧めしたす。

  1. 画像を操䜜する
  2. アップロヌド甚の画像の準備
  3. Web甚のGIFおよびPNG-8最適化
さらに、画像の構造を研究するずきに䜿甚するこずをお勧めする゜フトりェアは、次のものだけではありたせん。
  1. PhotoMEは、PNGおよびJPEGの構造を研究するための非垞に䟿利なプログラムであり、䞊蚘のものほど匷力ではありたせん。私はそれを䞻なものずしお䜿甚したす。
  2. ExifToolは、PNGおよびJPEGの構造を研究するための非垞に匷力なプログラムです。 コマンドラむンで動䜜し、オンラむン版がありたす- ゞェフリヌのExifビュヌア
  3. 010 Editor -Hex-editor。ただし、PNGずJPEGの構造を研究するのに圹立぀アドオン JPEG 、 PNG + チャンク があり、堎合によっおは亀換できない堎合がありたす。
最埌に、オンラむン画像最適化サヌビスPunyPngに぀いおお話したす。 最適化ずいう点では完璧ずは蚀えたせんが、今日は私が出䌚った䞭で最高のものです。



継続するには...




All Articles