こんばんは「ai」です。
コピペしてすぐに使えます。
ちょっとした画像の編集なら、特別なソフトを使用しなくても可能です。
オリジナル画像は加工されずに残り、編集された画像を保存先に指定したディレクトリに保存します。
職場や学校など自由にアプリをインストールできない環境でも手軽に加工できます。
画像ファイルをまとめて編集
global tmpFolder
global outFolder
-- リスト形式のダイアログを表示して処理を選択する
set wList to {"フォーマット変換", "リサイズ", "回転"}
choose from list wList default items "フォーマット変換" as text
set wSelect to result as text
if wSelect = false then
return
end if
if wSelect = "フォーマット変換" then
my FileFormat()
else if wSelect = "リサイズ" then
my ReSize()
else if wSelect = "回転" then
my FileRotation()
else
return
end if
-- ファイルフォーマット変換
on FileFormat()
my FolderOpen()
-- リスト形式のダイアログを表示して処理を選択する
set myList to {"jpeg", "tiff", "png", "gif", "jp2", "bmp", "psd", "tga"}
choose from list myList default items "jpeg" as text
set mySelect to result as text
if mySelect = false then
return
end if
if mySelect = "jpeg" then
set FileEx to ".jpg"
else if mySelect = "tiff" then
set FileEx to ".tif"
else if mySelect = "gif" then
set FileEx to ".gif"
else if mySelect = "jp2" then
set FileEx to ".jp2"
else if mySelect = "pict" then
set FileEx to ".pict"
else if mySelect = "bmp" then
set FileEx to ".bmp"
else if mySelect = "qtif" then
set FileEx to ".qtif"
else if mySelect = "psd" then
set FileEx to ".psd"
else if mySelect = "sgi" then
set FileEx to ".sgi"
else if mySelect = "tga" then
set FileEx to ".tga"
else
return
end if
try
-- フォルダ内のファイルリストを作成
set fList to do shell script "find " & quoted form of tmpFolder & " -maxdepth 1 -mindepth 1 |grep -v '\\/\\.'"
end try
set FileList to CreateList(fList) of me
-- theListのitemの数だけ繰り返す
repeat with i in FileList
try
-- i には(item n of FileList)が格納される
set FileExtension to GetFileExtension(i) of me
set FileName to do shell script "echo " & i & "|sed 's/" & FileExtension & "$//'| awk -F/ '{print $NF}'"
do shell script "sips -s format " & mySelect & " " & quoted form of i & " --out '" & outFolder & "/" & FileName & FileEx & "'"
end try
end repeat
end FileFormat
-- リサイズ
on ReSize()
my FolderOpen()
-- 複数ボタンのメッセージダイアログを表示
display dialog "pixel数を入力とリサイズの基準を選択" default answer "" buttons {"キャンセル", "長辺", "短辺"} default button 3
set tmpReturned to result
set SelectBtn to button returned of tmpReturned
set Px to text returned of tmpReturned
if SelectBtn = "キャンセル" then
return
end if
try
-- フォルダ内のファイルリストを作成
set fList to do shell script "find " & quoted form of tmpFolder & " -maxdepth 1 -mindepth 1 |grep -v '\\/\\.'"
end try
set FileList to CreateList(fList) of me
-- theListのitemの数だけ繰り返す
-- i には(item n of FileList)が格納される
repeat with i in FileList
set ImageResult to retDirectionOfImage(i) of me
if SelectBtn = "長辺" then
if ImageResult = false then
set Command to "resampleHeight"
else
set Command to "resampleWidth"
end if
else if SelectBtn = "短辺" then
if ImageResult = false then
set Command to "resampleWidth"
else
set Command to "resampleHeight"
end if
end if
try
set FileName to do shell script "echo " & i & "| awk -F/ '{print $NF}'"
do shell script "sips --" & Command & " " & Px & " " & quoted form of i & " --out '" & outFolder & "/" & FileName & "'"
end try
end repeat
end ReSize
on FileRotation()
my FolderOpen()
-- 複数ボタンのメッセージダイアログを表示
display dialog "回転角度を入力(時計回り)" default answer ""
set tmpReturned to result
set Angle to text returned of tmpReturned
try
-- フォルダ内のファイルリストを作成
set fList to do shell script "find " & quoted form of tmpFolder & " -maxdepth 1 -mindepth 1 |grep -v '\\/\\.'"
end try
set FileList to CreateList(fList) of me
-- theListのitemの数だけ繰り返す
repeat with i in FileList
try
-- i には(item n of FileList)が格納される
set FileName to do shell script "echo " & i & "| awk -F/ '{print $NF}'"
do shell script "sips -r " & Angle & " " & quoted form of i & " --out '" & outFolder & "/" & FileName & "'"
end try
end repeat
end FileRotation
-- 元フォルダ/保存先フォルダ指定
on FolderOpen()
-- ファイル選択ダイアログを開く
tell application "Finder"
set tmpFolder to choose folder with prompt "元画像のフォルダを選択"
set outFolder to choose folder with prompt "保存先フォルダを選択"
-- パスのコロンをスラッシュに変換
set tmpFolder to tmpFolder as text
set tmpFolder to ((alias tmpFolder)'s POSIX path)
set outFolder to outFolder as text
set outFolder to ((alias outFolder)'s POSIX path)
end tell
activate me
set tmpFolder to do shell script "echo " & quoted form of tmpFolder & "|sed 's:\\/$::'"
set outFolder to do shell script "echo " & quoted form of outFolder & "|sed 's:\\/$::'"
end FolderOpen
-- テキストから任意の文字を区切りとしてリストを作成
on CreateList(tmpList)
if tmpList ≠ "" then
set curDelim to AppleScript's text item delimiters
-- 以下の文末にあるreturnを変更すると他の文字を区切り文字に変更可能
set AppleScript's text item delimiters to return
set FileList to text items of tmpList
set AppleScript's text item delimiters to curDelim
return FileList
end if
end CreateList
-- ファイルの拡張子を切り出す
on GetFileExtension(FilePath)
set FileName to do shell script "echo " & quoted form of FilePath & "|awk -F'/' '{print($NF)}'"
try
set dSearch to do shell script "echo " & quoted form of FileName & "|grep '\\.'"
set FileExtension to "." & (do shell script "echo " & quoted form of FileName & "|awk -F'.' '{print($NF)}'")
on error
set FileExtension to ""
end try
return FileExtension
end GetFileExtension
-- 画像の縦横判定
on retDirectionOfImage(aFile)
set aFile to POSIX path of aFile
tell application "Image Events"
activate
set this_image to open aFile
set {aWidth, aHeight} to dimensions of this_image
close this_image
end tell
if aHeight > aWidth then
return false
else
return true
end if
end retDirectionOfImage
説明
基本的には、sipsコマンドのオプションを選択肢にして指定して貰うようにしているだけです。
元画像が保存されているディレクトリと保存先のディレクトリを選択していきます。
リサイズに関してはsipsだと縦横混在の画像群に使うとアスペクト比が崩れた画像ができてしまうので、短辺か長辺かどちらを基準としてpixel数を変更するかを選べるようにしました。
お気づきの方もいるかも知れませんが、他のページで紹介しているソースのパーツをブロックのように組み合わせて作成しています。
その為、変数名が被ってしまうというトラブルが起きたので直そうかと思ったのですが、グローバル変数にして誤魔化しました。
編集された画像さえ得られれば良いんです。