YouTubeやWordPressをやっているとサムネイルを作る機会が多く、私は「PNG(Portable Network Graphic)」で扱っています。
PNGは、圧縮による画質の劣化のない可逆圧縮の画像ファイルフォーマット。ゆえにファイルのデータ量を小さくするべく圧縮処理をしているのですが、オンラインだとアップロードできるサイズや枚数に制限があって、少々面倒に感じることもあります。
そこで、自分のパソコンで簡単に圧縮処理をしてくれる「pngquant」を導入しています。これがとても便利なんです。
今回、もっと柔軟にオプションを指定できないか?と思い立ったので、調べてみました。
pngquantのインストール方法
step
1ダウンロードする
公式サイトのリンクから直接ダウンロードできます。
任意のところに保存します。
step
2zipファイルを解凍する
ダウンロードしたファイルを右クリックして、圧縮を解凍します。
解凍したファイルは使いやすいところに移動させておくと良いでしょう。
私はDドライブに置いています。
pngquantの使い方
コマンドプロンプトでコードを実行します。
基本のコード
pngquant 【ファイル名】.png
これを実行すると、元データとは別に「【ファイル名】-fs8.png」ができます。
例えば、ファイル名「test1.png」を圧縮したい場合は、次のように書きます。
pngquant test1.png
これを実行すると、元データは残ったまま新たに圧縮された「test1-fs8.png」が作成されます。
圧縮後データを圧縮前データに上書きする場合
圧縮前データが要らない場合は、コードにオプションを指定すればよいです。
「--ext .png --force」を追加してあげれば、圧縮した画像ファイルを同じファイル名で上書きしてくれます。
pngquant --ext .png --force test1.png
フォルダ内にあるすべてのpngファイルを圧縮したい場合
また、フォルダ内にあるすべてのpngファイルを圧縮したいときは、ファイル名に「*(アスタリスク)」を使います。
pngquant *.png
フォルダを指定することもできます。例えば「Dドライブのtest2」フォルダ内のpngファイルを全部圧縮したいときは、次のように書きます。
pngquant D:\test2/*.png
圧縮の品質を指定したい場合
「pngquant」では、JPEGと同様に品質を「0から100」の範囲で指定できます。
pngquant --quality=65-80 test1.png
処理速度を変えたい場合
速度は「1(遅い)から10(速い)」の範囲で指定できます。デフォルトは「3」。
速度と品質はトレードオフで「10」は品質が5%低くなりますが、「3」より8倍高速です。
ちなみに、手元のpngファイルで調べたところ、「1」と「2」の方が「3」より圧縮率が高く、「1」と「2」では同じでした。
pngquant -s【スピードの数字(1~10)】 test1.png
私が使っているコード
私の場合は、
- 圧縮前データに上書きしたい
- フォルダ内のpngファイルを全部圧縮
- 処理速度より圧縮率
を求めているので、コードは次のようになりました。
pngquant --ext .png --force -s1 *.png
コマンドプロンプトに馴染みがない場合
バッチファイルを作って、それをダブルクリックすると簡単です。
作り方は、メモ帳などのテキストエディタでコマンドプロンプトで実行するコードを書いて保存します。
注意点は「pngquant」のフォルダを指定すること。バッチファイルの保存場所によって「pngquant」が起動しません。
例えば、「pngquant」をDドライブに保存している場合は、このように書きます。
cd /d D:\pngquant
pngquant --ext .png --force -s1 *.png
保存する時、拡張子は「.txt」ではなく、「.bat」に書き換えてください。
ちなみに「.cmd」でも構いません。「.bat」と「.cmd」の違いは、起源だったり、ERRORLEVEL環境変数の挙動だったりするそうです。
フォルダ名・ファイル名に注意
「pngquant」は、pngファイルのファイル名や保存しているフォルダ名に日本語が入っていると処理してくれません。
日本語の名前がついていないフォルダ、ファイル名で保存して、圧縮してからリネームすることになります。
まとめ
pngファイルをお手軽に制限なく圧縮することができて、とても便利です。
ちなみに、Macでもターミナルを使えば同様のことができるそうです。