0

写真をサイズで並べ替えたいのですが、幅で並べ替えるのが最も簡単です。1919pxより大きい幅の画像を取得して別のフォルダに入れたいです。私はググって何時間も運がないことを試しました。

私はこのエラーを受け取っています:繰り返しループの中でerror "Image Events got an error: Can’t make item 1 of dimensions of image \"1mouwi.jpg\" into type specifier." number -1700 from item 1 of dimensions of image "1mouwi.jpg" to specifieritem 1これを修正する方法について何か助けはありますか?

私のコード:

set picFolder to alias ":Users:USERNAME:Pictures:DESKTOPS:"
set hdFolder to alias ":Users:USERNAME:Pictures:DESKTOPS_HD:"


tell application "System Events"
    set photos1 to path of files of picFolder
    set num to count of photos1
    set photos to items 2 thru num of photos1
end tell

set hd to {}
repeat with imgPath in photos
    set imgAlias to alias imgPath
    tell application "Image Events"
        set img to open imgPath
        set width to item 1 of dimensions of img
        if width > 1919.0 then
            set end of hd to imgAlias
        end if
        close img
    end tell
end repeat

tell application "Finder"
    move hd to hdFolder
end tell
4

3 に答える 3

2

簡単な解決策は、「get」コマンドと括弧を使用することです。一般に、「get」は理解されているため、通常はコマンドで使用する必要はありません...しかし、AppleScriptの癖により、明示的に使用する必要がある場合があります...特に1行に複数のコマンドがある場合. また、括弧は、コードの幅行の複数の操作が正しい順序で実行されることを保証します

set width to item 1 of (get dimensions of img)

ただし、他にも使用できる最適化がいくつかあるため、スクリプトの作成方法は次のとおりです。

set picFolder to (path to pictures folder as text) & "DESKTOPS:"
set hdFolder to (path to pictures folder as text) & "DESKTOPS_HD:"

tell application "System Events" to set photos1 to path of files of folder picFolder
set photos to items 2 thru end of photos1

set hd to {}
repeat with imgPath in photos
    set imgAlias to alias imgPath
    tell application "Image Events"
        set img to open imgAlias
        set width to item 1 of (get dimensions of img)
        close img
    end tell

    if width > 1919 then
        set end of hd to imgAlias
    end if
end repeat

tell application "Finder"
    if hd is not {} then move hd to folder hdFolder
end tell
于 2013-10-08T16:43:43.990 に答える
0

mdls -rn kMDItemPixelWidthシェルで次のように使用できます。

for f in ~/Pictures/DESKTOPS/*; do [[ $(mdls -rn kMDItemPixelWidth "$f") -ge 1920 ]] && mv "$f" ~/Pictures/DESKTOPS_HD/; done

mdls一部の画像のサイズが表示されない場合は、ImageMagick または を使用してみてsipsください。

brew install imagemagick; identify -format %w input.png

sips --getProperty pixelWidth input.png | awk 'END{print $NF}'

于 2013-10-08T11:21:10.727 に答える