画像の縦長横長を見てフォルダ仕分け

1つのフォルダに入っている画像を、画像サイズを取得して縦長か横長かを判定して、それぞれのフォルダに仕分けします。

スクリプト名:画像の縦長横長を見てフォルダ仕分け
set a to choose folder with prompt画像フォルダを選択
tell applicationFinder
  set allF to every file in a
end tell

set b to choose folder with prompt出力先フォルダ(縦)を選択
set c to choose folder with prompt出力先フォルダ(横)を選択

tell applicationImage Eventsto launch
repeat with i in allF
  set j to i as alias
  
set bb to retDirectionOfImage(j) of me
  
if bb = false then
    tell applicationFinder
      move i to b
    end tell
  else
    tell applicationFinder
      move i to c
    end tell
    
  end if
end repeat

on retDirectionOfImage(aFile)
  tell applicationImage Events
    activate
    
set this_image to open aFile
    
set {aWidth, aHeight} to dimensions of this_image
    
close aFile
  end tell
  
if aHeight > aWidth then
    return false
  else
    return true
  end if
end retDirectionOfImage

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

5 Responses to “画像の縦長横長を見てフォルダ仕分け”

  1. Jun1 Says:

    はじめましてJun1と申します。

    デジカメ画像データjpegの縦表示と横表示のものを自動で仕分けしたくて、
    このホームページにたどり着きました。

    環境はmac os x 10.9.2(MacBook Pro)です。jpgはCanonデジカメやiPhone4Sの写真データです。

    早速、縦横の画像が混在したフォルダを指定して実行してみたところ、
    次のようなエラーが起きました。〜〜〜は伏せています。

    error “Image Events でエラーが起きました:alias \”〜〜〜:Users:〜〜〜:Desktop:縦横:IMG_1234.JPG\” のタイプを specifier に変換できません。” number -1700 from alias “〜〜〜::Users:〜〜〜::Desktop:縦横:IMG_1234.JPG” to specifier

    スクリプトの後半あたりの「close aFile」を「close this_image」に変えたらエラーなく実行できましたが、
    Applescript初心者なので、この修正が正しいのか判断つきません。正しいでしょうか?

    また、Applescriptを実行した結果は、縦画像も横画像も「横」フォルダに仕分けられてしまいました。
    おかしいと思い、縦と横の各画像データのメタデータを確認すると、
    縦画像と横画像とも「Width, Height」は同じ(Pixel Height: 2,592 Pixel Width: 3,888)で、
    Orientationのところが違っていました。
     横画像: Orientation: 1 (Normal)
     縦画像: Orientation: 8 (Rotated 90° CW)

    このscriptは、dimensions「Width, Height」で判別されているのでこのような結果になっているのですね。

    Orientationの値を取得して、縦表示と横表示を判別して仕分けるscriptを作りたいのですが、
    Orientationを取得するコマンドが見つけられないです。
    例えば、Orientationが「1 (Normal)」なら横、それ以外は縦というようなscriptは作成できますか?

  2. maro Says:

    このScriptの元になったのは、AppleがWebで公開しているサンプルだと思います。変数の名前の付け方がAppleのサンプルらしいクセが出ています。

    掲載時には、close aFileで動いていましたが……10.9上であらためて見てみると、close this_imageが正しいですね。なんで、こういう書き方をしていたんでしょう、、、

    そこだけ書き換えて10.9上で動作確認したところ、問題なく期待どおりの動作をしてくれました。

    メタデータにアクセスすると、Orientationが取得できるはずで……直接アクセスするわけではないですが、(Terminal上で)mdlsコマンドを使って画像にアクセスすると、メタデータでOrientationの有無を確認できるので、ぜんぜん作るのは無理ではないと思います。

  3. maro Says:

    修正版はこちら。

    http://piyocast.com/as/archives/2898

  4. Jun1 Says:

    close this_imageの修正が正しかったようで良かったです。^_^

    Orientationの件、mdlsコマンドを教えていただきありがとうございます。
    Terminalのmdlsコマンドで確認すると、次のようになりました。

    横表示:
     kMDItemOrientation = 0
    縦表示:
     kMDItemOrientation = 1

    画像の縦横表示で判別するように後半を次のようにしてみましたがエラーでした。

    on retDirectionOfImage(aFile)
    tell application “Image Events”
    activate
    set this_image to open aFile
    set {aOrientation} to Orientation of this_image
    close this_image
    end tell
    if aOrientation > 0 then
    return false –縦
    else
    return true –横
    end if
    end retDirectionOfImage

    Orientation of this_imageの部分がよくわからないです。OrientationをkMDItemOrientationに変えてもダメでした。

    お願いがあるのですが、
    画像の縦横表示を判別してフォルダ仕分けるApplescriptを作っていただけないでしょうか?

  5. maro Says:

    では、メールでご連絡します。

Leave a Reply