Macのスクリプトを使って画像を圧縮してみる

2023.04.28 08:00
2023.08.15 14:08
Macのスクリプトを使って画像を圧縮してみる

jpgの圧縮がMacのコマンドラインからできるみたいなので、スクリプトを組んでやってみました(Mac限定)

1. インストール

圧縮には「pngquant」というソフトを使うみたいですので、まずはコマンドラインでソフトが入っているか確認します。

pngquant -V

入っていればバージョンが表示されます。入っていなければ、homebrewから入れます。

brew install pngquant

2. ファイルを一つ圧縮してみる

ソフトが入ったら、スクリプトを組んでみます。
至って簡単で、ファイルを指定して実行するだけです。
まずはファイルを一つ圧縮してみます。

#!/bin/sh

# ファイル名指定
file="/Users/xxxxx/Documents/Captures/test.png"

# 画像圧縮
pngquant $file

# 完了メッセージ
echo "圧縮しました":

元のファイルはそのままに、「-fs8」という文字が付与されて圧縮されました。
元ファイルに上書きしてもいい場合はこんな感じでみたいです。

#!/bin/sh

# ファイル名指定
file="/Users/xxxxx/Documents/Captures/test.png"

# 画像圧縮
pngquant --ext .png $file --force

# 完了メッセージ
echo "圧縮しました":

他にもこんなオプションがあるみたいです。

// 圧縮率を指定(Q=85以上となるように減色にトライ、Q=60以下となった場合はなにもしない)
--quality=60-85

// 圧縮スピード (1が遅て10が速い。遅い方が圧縮率が高くて、デフォは3)
--speed 1

3. フォルダ内のファイルを一括で圧縮してみる

フォルダ内のpngをまるごと圧縮することもできるみたいです。「.pngの拡張子を全部圧縮」って感じみたいですね。

#!/bin/sh

# https://qiita.com/daskepon/items/72d4e156aef32db0fd6d

# ファイル名指定
dir="/Users/xxxxx/Documents/Captures/*.png"

# 画像圧縮
pngquant ${dir}

# 完了メッセージ
echo "圧縮しました":

これで一括で圧縮できました。上書き指定をしていないので、元のファイルがすべて残りつつ、圧縮されたファイルが「-fs8」の文字がついて生成されました。

すべて上書きしてもいいならこうするみたいですね。

#!/bin/sh

# https://qiita.com/daskepon/items/72d4e156aef32db0fd6d

# ファイル名指定
dir="/Users/xxxxx/Documents/Captures/*.png"

# 画像圧縮
pngquant --ext .png --force ${dir}

# 完了メッセージ
echo "圧縮しました":

4. エイリアスを設定する

毎度移動して実行するのも面倒なので、短いエイリアスコマンドを指定します。zshのプロファイルに追加することでオリジナルのコマンドが使えるようになるので、便利です。
※ちなみにmacOS Catalina(10.15) からは標準のシェルが zshになりましたが、それ以前はbashです。環境によって読み替える必要があります。とはいえ、殆ど変わりません。

~/.zprofileというファイルに書いていきます。なければつくります。
「image compressor」の略で「ic」で行ってみます。既にあるコマンドを避けなくては行けないため、かぶってないものを探すのが大変ですね。

# エイリアス
alias ic=~/scripts/compression.sh

こんな感じで追加します。
「~/scriptsにあるcompression.shを実行する」ってのを「ic」と打つだけで実行できるようにしました。ちなみにzshを追加した後はリロードしなくてはいけないので、コマンドラインを一度閉じてからもう一度開いて実行します。これをやらないと実行されません。

最後にコマンドラインで実行してみましょう。

ic

無事所定の場所の画像が圧縮されました。

今回は以上です!