GNU/Linux >> Linux の 問題 >  >> Linux

webp による画像の最適化

画像の最適化 jpegoptim、jpegtran、optipng、pngcrush、および ImageMagick については、既にいくつかの記事を作成しました。今日は、webp による画像の最適化について説明したいと思います。

縮小と圧縮は、Web ページのコードを最適化するための非常に標準的なものになりました。一般的な Web リソースはすべて、画像を最適化し、可能な限り同じ CSS を使用し、適切な画像形式を選択します。しかし、これでは十分ではありません。 HTTP アーカイブの統計によると、画像は Web ページのサイズの約 64% を占めています。新しい WebP 標準は、JPEG と PNG を置き換えるのに役立ちます。

WebP について簡単に

この形式は 2010 年に登場し、その後 Google によって開発されました。 WebP は、損失の有無にかかわらず、VP8 ビデオ コーデックのキーフレームの圧縮アルゴリズムに基づいており、RIFF に基づくコンテナーにパッケージ化されています。 WebP ロスレス画像は、PNG と比較して平均で 26% 小さく、WebP ロッシー画像は、同じ SSIM インデックスの JPEG と比較して 25 ~ 34% 小さくなっています。新しい形式は透明度 (アルファ チャネルと呼ばれる) もサポートします。

動作原理

非可逆圧縮では、WebP は予測コーディングを使用します。このコーディングでは、隣接するピクセル ブロックの値を使用して目的のピクセル ブロックの値を予測し、その差をエンコードします。

無損失圧縮では、画像のよく知られたフラグメントを使用して、ピクセルを正確に再構築します。興味のあるマッチング アルゴリズムがない場合は、ローカル パレットを使用することもできます。

メリットとデメリット

背後:

  • 小さい画像サイズ;
  • 高度な圧縮アルゴリズム;
  • 高画質;
  • 透明性のサポート

反対:

  • 普及率が低い;
  • 損失を伴う圧縮の「可塑性」
  • ピクセルの色やその他のコンピュータ グラフィックスが失われる可能性があります。

WebP は、Chrome、Opera、および標準の Android ブラウザーで既にサポートされており、WebPJS ライブラリを使用して、すべての一般的なブラウザー (Flash を使用する IE 6 以降) で表示できます。さらに、libwebp のエンコードとデコードの軽量ライブラリ、WebP のエンコードとデコードのためのコマンドライン ユーティリティ、およびこの形式の画像を表示、多重化、およびアニメーション化するためのツールが開発されました。

cwebp のインストール

Cwebp には、コンパイル済みの Linux バイナリがあります。そのため、インストールは簡単にダウンロードして解凍するだけです:

# wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.3-linux-x86-64.tar.gz
# tar zxf libwebp-1.0.3-linux-x86-64.tar.gz 
# cp -a libwebp-1.0.3-linux-x86-64/bin/cwebp /usr/bin/
# cp -a libwebp-1.0.3-linux-x86-64/bin/dwebp /usr/bin/

cwebp の使用法

cwebp ユーティリティは JPEG、PNG、および TIFF からの変換に使用され、dwebp はデコードに使用されます。変換は (ユーティリティ ディレクトリから) 簡単なコマンドで開始されます:

# cwebp input.png -q 80 -o output.webp

同じ原理で、デコードを開始できます。エンコーディングのチェックなど、多くのオプションと追加パラメーターがあります。

WebP 導入

あなたは新しい形式に興味を持ち、すべてのテストを行い、統計をもう一度見て、Chrome が依然として最も人気のある Web ブラウザーであることを確認しました。次は何?次に、WebP 内のすべての画像のコピーを作成する必要があります (すべてのファイルを変換する簡単なスクリプトを作成できます)。次に、サイトのユーザーをチェックし、ブラウザーが WebP をサポートしている場合は、コンパクトな画像を送信します。

つまり、クライアントのブラウザーでフォーマットのサポートをチェックする独自のスクリプトを作成し、Web サーバーからパームオフするか、このタスクを Web サーバーに完全に割り当てることができます。 2 番目のオプションは、より論理的に思えます。

Accept ヘッダーを使用したネゴシエーション

ブラウザーは Accept ヘッダーを次のように渡します:

オペラで:

Accept: text / html, application / xml; q = 0.9, application / xhtml + xml,
image / png, image / webp, image / jpeg, image / gif, image / x-xbitmap, * / *; q = 0.1

Chrome の場合:

Accept: image / webp, * / *; q = 0.8

これを知っていれば、WebP を自動的に送信するように Web サーバーを構成できます。例として、構成ファイルに次のようなものを追加する必要がある Nginx を使用します。

location / {

  if ($http_accept ~* "webp")    { set $webp_accept "true"; }
  if (-f $request_filename.webp) { set $webp_local  "true"; }

  if ($webp_local = "true") {
    add_header Vary Accept;
  }

  # if the client supports WebP, then upload the file
  if ($webp_accept = "true") {
    rewrite (.*) $1.webp break;
  }
}

Apache の設定も同様です。 Accept で WebP サポートが見つからない場合は、通常のファイルが転送されます。 Nginx が静的データをキャッシュするためのプロキシとして使用されている場合、構成は異なります:

server {
  location / {
   
    if ($http_accept ~* "webp") { set $webp T; }
    proxy_cache_key $scheme$proxy_host$request_uri$webp;

    proxy_pass http://backend;
    proxy_cache my-cache;
  }
}

結論

WebP 画像形式は Web ページのサイズを大幅に縮小しますが、サポートが限られているため、Web サーバーを追加で構成し、すべての画像のコピーをいくつかの形式で含める必要があります。


Linux
  1. DISMを使用してシステムイメージを修復する

  2. サーバーイメージングでタスク状態を使用する

  3. 画像最適化のためのjpegtran

  1. 画像最適化のための jpegoptim

  2. 画像最適化の optipng

  3. 画像最適化のためのpngcrush

  1. Buildahを使用したコンテナイメージビルドの高速化

  2. 画像最適化のためのimagemagick

  3. -O3 最適化を使用した GNU/Linux のコンパイル