1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

画像圧縮ツールSquooshのコマンドライン版を使って、複数ファイルを一括で圧縮する

Last updated at Posted at 2021-02-05

画像を圧縮するのに、「Squoosh」を使って、ドラッグ&ドロップで1枚1枚圧縮していました。
一括でできないかなぁと思っていたら、「コマンドライン版」があるのに今更気が付きました。

インストール方法

npm i -g @squoosh/cli

簡単な使い方

jpgファイルを出力したい場合

squoosh-cli --mozjpeg '{}' -d <出力ディレクトリ> <入力ファイル名>

--mozjpegのconfigにはautoを指定して自動オプティマイザーを利用することもできるのですが、自分の環境では、「RuntimeError: memory access out of bounds」が高い確率で出て圧縮に失敗するので、{}を指定しています。

例:圧縮したhoge.jpgをoutput_dirディレクトリ下に出力する

squoosh-cli --mozjpeg '{}' -d output_dir hoge.jpg

リサイズしたい場合

squoosh-cli --mozjpeg '{}' --resize '{"width":<幅のピクセルサイズ>, "height":<高さのピクセルサイズ>}' -d <出力ディレクトリ> <入力ファイル名>

例:hoge.jpgの幅を850pxにする。

squoosh-cli --mozjpeg '{}' --resize '{"width":850}' -d output_dir hoge.jpg

一括実行ツールを作成する

Pythonで一括実行ツールを作成してみました。
画像を圧縮し、かつ、横長であれば、幅を850pxにリサイズ、縦長であれば、高さを850pxにリサイズします。

resize.py
# -*- coding: utf-8 -*-

import sys
import subprocess
from PIL import Image

if __name__ == "__main__":
  file_list = []

  with open('file_list.txt', 'r', encoding='UTF-8') as f:
    for line in f:
      line = line.rstrip('\n')
      if not line:
        break
      file_list.append(line)     

  for filename in file_list:
    filename = 'input/' + filename

    im = Image.open(filename)

    resize_opt = '{"width":850}'
    if im.width < im.height:
      resize_opt = '{"height":850}'

    cmd = 'squoosh-cli --mozjpeg {} --resize ' + resize_opt + ' -d output ' + filename
    # rc = subprocess.Popen(cmd, shell=True)
    rc = subprocess.call(cmd, shell=True)

コメントアウトしている「subprocess.Popen」であれば、コマンドが非同期で実行できるのですが、自分の環境で並列でsquoosh-cliを実行すると、完了するまでPCが操作不能になってしまいました。

使い方

  1. 上記のコードをコピーして、resize.py(名前は任意)を作成する。
  2. resize.pyと同じディレクトリに「input」「output」ディレクトリ、「file_list.txt」を作成する。
  3. inputディレクトリ下に圧縮&リサイズしたい画像を配置する。
  4. file_list.txtに画像ファイル名を記述する。(1行1ファイル)
  5. 「python resize.py」を実行する。

file_list.txtの記述例

hoge.jpg
foo.jpg
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?