あると便利かもしれないシェルスクリプト:画像の一括縮小

最近AdobeのPhotoshopがアップデートされました。それに伴っていくつか変更されたことがあったのですが、画像アセットの仕様がかなり変更になった模様です。これまではグループに名前をつけて書き出すときに倍率を選ぶことができて、異なるサイズの画像が書き出せたのですが、どうも2015になってできなくなった模様です(単にやり方が変わっただけでそれを分かってないだけなのかもしれませんが...)。ということでこれを機にPhotoshopから切り出すのはワンサイズにしてあとはシェルスクリプトで一括縮小してやろうということでシェルスクリプトを書きました。

大したことはやってません

とりあえず

brew install imagemagick

ImageMagickをインストールしてください。

でもって本体のシェルスクリプトはこれです。
トップディレクトリにこのスクリプトを置いて、なおかつトップディレクトリにresouces/imagesフォルダがあることが前提です。
psdから切り出した画像(最大幅1280px)をresouces/imagesの中に置いておくと(その中にサブフォルダがあっても大丈夫です)、
それらのファイルから1280px、640px、320pxの画像を作ってくれます。

#! /bin/bash
 
####################################################################################################
#
# resourcesとimagesディレクトリが置かれているディレクトリから実行することを前提にしています。
# ディレクトリ内で実行することでorgディレクトリからコピーしてリサイズしてリネームというのを
# 3つの大きさ(320px, 640px, 1280px)分繰り返す。
#
####################################################################################################
 
for file_type in jpg png; do
 
  pushd resources/images > /dev/null
 
  for directory_name in `find . -type d`; do
 
    pushd ${directory_name} > /dev/null
 
    for file_name in `find . -type f | grep -e \.${file_type} | grep -v \@3x.${file_type} | grep -v \@2x.${file_type} | grep -v \@1x.${file_type}`; do
 
      file_name=`basename ${file_name}`
      file_name=${file_name#*/}
      file_name=${file_name%.${file_type}}
 
      echo "----------------------------------------------------------"
      echo ""
      echo "Resizing ${file_name#*/}.${file_type} at ${directory_name}..."
      echo ""
      echo "----------------------------------------------------------"
 
      convert -resize 1280x -unsharp 2x1.4+0.5+0 -verbose ${file_name}.${file_type} ${file_name}@3x.${file_type}
      convert -resize  640x -unsharp 2x1.4+0.5+0 -verbose ${file_name}.${file_type} ${file_name}@2x.${file_type}
      convert -resize  320x -unsharp 2x1.4+0.5+0 -verbose ${file_name}.${file_type} ${file_name}@1x.${file_type}
 
    done
 
    popd > /dev/null
 
  done
 
  popd > /dev/null
 
done