サイトアイコン TAKAHIRO today

【Mac】Webpを簡単にPNGやJPGにする

Webの素材を再利用して・・・などの場合、Facebookだとそのまま利用できなかったりすることもある。この辺りで時間をかけたくないので、特定のフォルダにドロップしたら、PNGとJPGに変換(元のファイルもそのまま)するようにしたいと考えた。

Mac の Automator で設定すればシームレスに行きそうなので、設定を行ったのでその記録。

Automatorを開く

  1. Launchpadから「Automator」を開く。
  2. 「新規書類」を選択し、「フォルダアクション」を選択。

フォルダを選択する

画面上部にある「フォルダアクションは、次の場所に追加されたファイルやフォルダを受け取る」の項目で、WebPファイルをドロップしたいフォルダを選択。

Automatorの画面

スクリプトを追加する

  1. 左側の「アクションライブラリ」から「シェルスクリプトを実行」を右側にドラッグ。
  2. 右側の「シェルスクリプトを実行」の右側、入力の引き渡し方法を「引数として」を選択。
  3. 「シェルスクリプトを実行」アクションに、以下のスクリプトを入力。
#!/bin/zsh
# シェルは、必要に応じて /bin/bash に変更

# ログファイルのパスを設定
log_file=~/Desktop/automator_log.txt

# スクリプト開始のログ出力
echo "Script started at $(date)" >> "$log_file"
echo "Number of files: $#" >> "$log_file"

# 渡されたすべてのファイルに対して処理を実行
for f in "$@"
do
  # ファイルパスのログ出力
  echo "Processing file: $f" >> "$log_file"

  # ファイル名と拡張子の分離
  filename="${f%.*}"
  extension="${f##*.}"

  # ファイル情報のログ出力
  echo "Filename: $filename, Extension: $extension" >> "$log_file"

  # 拡張子を小文字に変換して比較
  if [[ "${extension,,}" == "webp" ]]; then
    # PNGに変換
    sips -s format png "$f" --out "${filename}.png" >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
      echo "Converted to PNG: ${filename}.png" >> "$log_file"
    else
      echo "Failed to convert to PNG: $f" >> "$log_file"
    fi
    
    # JPEGに変換
    sips -s format jpeg "$f" --out "${filename}.jpg" >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
      echo "Converted to JPEG: ${filename}.jpg" >> "$log_file"
    else
      echo "Failed to convert to JPEG: $f" >> "$log_file"
    fi

  else
    echo "Skipped (not a webp file): $f" >> "$log_file"
  fi
done

# スクリプト終了のログ出力
echo "Script ended at $(date)" >> "$log_file"

ワークフローを保存する

作成したワークフローに適当な名前を付けて保存。
「WebPへ変換」など自分で理解しやすい名前がいいかな。

テストする

指定したフォルダにWebPファイルをドラッグ&ドロップして、PNGとJPEGファイルが自動的に生成されることを確認。

デスクトップにもログが残るはずだから、それも併せて確認。

おそらくこれで問題なく変換が可能なので終了。

追加情報

もしsipsで品質や設定が足りない場合、imagemagick などをインストールして同様のスクリプトで利用することができる。

モバイルバージョンを終了