Skip to content
11月 3 / rakkyoo

sipsコマンドで複数の画像をリサイズ(シェルスクリプトの最初の一歩)


昨日の「sips」を使うときに,いちいち入力ファイル名と出力ファイル名を入力するのが面倒なので,一括でできないかなと思い,シェルスクリプトにちょっとだけ手を出してみることにしました.

今回やりたいことは...

「temp.jpg」をサイズ変更して,「out」フォルダに保存したい.

    $ sips -z 281 500 ./temp.jpg –out ./out/temp.jpg

ここで,temp.jpgだけを指定すればフォルダ「out」に「281×500」のサイズで保存できるようにしたい.

という感じです.

まずは,シェルスクリプトを書く準備から.

1.シェルスクリプト用のフォルダを作成

これはどこでもいいらしいのですが,「~/ShellScript/」としました.

    $ mkdir ~/ShellScript

2.シェルスクリプト用のフォルダにパスを通す

作成したシェルスクリプトが簡単に使えるように,フォルダにパスを通しておきます
「~/.bash_profile」か「~/.bashrc」に以下のように追記します.

    export PATH=$PATH:~/ShellScript

これでフォルダの準備完了です.

3.シェルスクリプトを作成する

簡単な設計要件としては,

  • 引数で変換したい画像ファイルを指定する(まずは1ファイル)
    • 「$ image_change.sh test.jpg」 のように使いたい
  • 画像のサイズを変換する
  • あらかじめ出力用に用意してあったフォルダに変換したファイルを保存する

という感じです.
これを実装するために,「image_change.sh」を作成します.
エディタなら何でもいいらしいのですが,Emacsの場合は,ターミナルで,

    $ emacs ~/ShellScript/image_change.sh

として,ファイルを作成します.
後は,emacs上で

    sips -z 281 500 $1 –out /out/$1

と打ち込んでから保存(C-x C-s)して,Emacsを終了(C-x C-c)するだけです.
ここで,引数に対する変数については,

    $# : 引数の数
    $@ : 引数全体
    $1 : 一つ目の引数
    $n : n個目の引数

とのことです.$nは「${n}」と書いてもいいそうです.
これを使って,一つ目の引数を$1としてスクリプトに書いているだけです.

4.パーミッションの変更

あとは,(たった1行ですが)作ったシェルスクリプトのパーミッションを変更して,実行可能にします.

    $ chmod a+x ~/ShellScript/image_change.sh

としておけばOKです.

5.シェルスクリプトの使用

以上で一通り終了です.
ターミナルで,

    $ image_change.sh test.jpg

とすれば,「/out」に「test.jpg」が作成され,サイズの変更もできています.

6.複数ファイルに対応

使っていると,引数として,ファイルを複数指定できたらいいなっと思うことがあるので,複数ファイルに対応しようと思いました.
引数の全体を表すのが「$@」なので,for文を使って,

    for arg in $@
    do

      各引数ごとの処理

    done

とすればいいみたいです.
この例では,「arg」に引数が一つ一つ入るので,今回の例では以下のように書けば複数ファイルに適用できるようになります.

    for arg in $@
    do

      sips -z 281 500 ${arg} –out ./out/${arg}

    done

と変更して,保存すれば終了です.
引数を指定しなったときの処理を書いたりしてもいいのかもしれないですが,個人的に使うだけなので,これで十分です.
当たり前なのかもしれないのですが,これだけで

    $ image_change.sh *.jpg

とすると,フォルダ内のすべてのJPGファイルについて適用してくれます.

本当にちょっとしたスクリプトですが,十分効果的です.

[`twib` not found]

Leave a comment

CAPTCHA


This blog is kept spam free by WP-SpamFree.