画像ファイルを一発でWebP形式にするツールを自作して実行ファイル化してみた
前回、PNGやJPEGなどさまざまな形式の画像をWebPやAVIFなどの形式に整えるプログラムを作成しました。今回はGIGAZINEの編集部員が誰でも簡単に使えるよう、「pkg」というライブラリを使用して実行ファイルの形式に整えていきます。
pkg - npm
https://www.npmjs.com/package/pkg
プログラムの中身や環境構築については下記の記事を確認するとスムーズです。
いろんな画像を一発で特定の形式に整えてくれるプログラムを作成した話 - GIGAZINE
まず、「npm install pkg」とコマンドを入力してpkgライブラリをインストールします。インストールしたら、package.jsonをテキストエディタで開いて「"scripts"」の項目内を下記のように「"build": "pkg -t latest-win -o bin/webp.exe index.js"」と書き換えます。
package.jsonを保存し、「npm run build」と入力するとプログラムが「webp.exe」という名前で実行ファイルとして書き出されます。ただし、今回は「一部のファイルを実行ファイルに含めることができなかった」という警告が表示されました。
警告文で指定された通り、「webp.exe」があるフォルダに「sharp」というフォルダを作成し、「node_modules」フォルダの「sharp」にある「build」と「vendor」というフォルダをコピーすればOK。
コマンドラインツールなのでコマンドラインを使用して起動するのが正攻法なのですが、Windowsではファイルをドラッグ&ドロップすることでそのファイルを引数にしてコマンドラインツールを実行することができます。ファイルを「webp.exe」にドラッグし、「Node.js JavaScript Runtimeで開く」と書かれた状態でドロップします。
すると画像ファイルがあったフォルダに「dist」というフォルダが出現し、WebP形式に変換された画像が生成されました。
WebP形式に対応していないブラウザでもサイトが閲覧できるよう、フォールバック用のPNG画像も生成します。元のPNG画像をそのまま使用するとファイルサイズが大きいため、sharpの「png()」でパレット化するようにしました。
再びビルドして実行ファイル化し、用意した画像をまとめて変換するとこんな感じ。
これらの画像をアップロードして、下記のようなHTMLタグを使用するとWebPに対応しているブラウザではWebP形式の画像が表示され、対応していないブラウザではPNG形式が表示されるというわけです。今回の記事では全てこのタグの形式で画像を表示しています。
<picture>
<source srcset="https://i.gzn.jp/img/2024/11/02/webp-png-fallback-exe/00.webp" type="image/webp"/>
<img src="https://i.gzn.jp/img/2024/11/02/webp-png-fallback-exe/00.png" alt="" style="max-width:560px;" border="0"/>
</picture>
もしこの記事の表示に何かおかしい点があれば、この「画像ファイルを一発でWebP形式にするツールを自作してみた」記事ページを表示した状態で最下部の「誤字脱字の指摘」フォームより連絡すると担当者に直通で連絡できるので、ご協力していただけると助かります。
・関連記事
JPEGよりもWebPは本当に優れているのか、cjpeg・WebP・mozjpeg・AVIFを比較検証した結果 - GIGAZINE
「BMP」や「PCX」など忘れ去られた画像ファイル形式10選 - GIGAZINE
画像生成AI「Stable Diffusion」が実はかなり優秀な画像圧縮を実現できることが判明 - GIGAZINE
画像ファイルのサイズ圧縮&JPEG/PNG/WEBP/AVIF/JXLにフォーマットを変換&オフラインでも利用可能な「Compress Images」 - GIGAZINE
無料で動画ファイルをブラウザ上で簡単にアニメーションWebPに変換できる「Video2WebP」 - GIGAZINE
・関連コンテンツ
-
編集部員向けに、画像を自動でGIGAZINEに掲載する時の形式に整えるツールを作成しました。せっかくなので、作り方を記事にしてみました。 画像を変換する方法は多数存在していますが、今回はJavaScriptのライブラリである「sharp」を使用します。 sharp - npm https://www.npmjs.com/package/sharp 最初に開発環境を整えるため、Node.jsをインストールします。Node.jsのダウンロードページで「Prebuilt Installer」をクリックし、「Download Node.js v○○.○○.○」をクリック。 ダウンロードしたmsiファイルをダブルクリックして実行します。 Node.jsのセットアップウィザードが起動するので「Next」をクリック。 ライセンスに同意して「Next」をクリックします。 インストール先のフォルダを確認して「Next」をクリック。 何をインストールするのかを設定できますが、今回は特に何も変更せず「Next」をクリックすればOK。 「Next」をクリック。 「Install」をクリックします。 インストールが完了したら「Finish」をクリックしてインストーラーを閉じます。 続いて必要なライブラリをセットアップしていきます。コマンドプロンプトを起動して「cd」コマンドで作業用のフォルダに移動し、下記のコマンドを入力。 [code]npm init -y npm install sharp@^0.29.3 fs-extra[/code]
エクスプローラーから作業用フォルダ内に「index.js」という名前のファイルを作成し、メモ帳などのテキストエディタで開いて下記のコードを入力します。 [code]const fs = require("fs-extra"); const sharp = require("sharp"); const dirname = process.cwd(); const input = fs.readFileSync(dirname + "/00.png" class="lazyload">