Photosで選択中の写真をKeynoteで現在オープン中の書類の現在のスライド(ページ)以降に配置していくAppleScriptです。
作業の過程をiPhoneで写真撮影。撮影した写真を写真.app(Photos.app)経由でKeynote書類にまとめる作業を行なっていました。作業工程を時間こみで表示できないとわかりにくかったので、Keynoteの各スライドに時刻を入れるようにAppleScriptを書いておきました(同じ作業が二度あるかは不明ですが、二度目からは明らかに時間の節約。つまり時間の貯金ができることになります)。
写真.app(Photos)上でKeynoteに配置したい写真を選択しておき、本Scriptを実行します。
Keynote書類上に新規スライドを追加し、撮影時刻と写真を配置していきます。
実行直後にPhotosで選択中の写真をファイルに書き出すため、若干待たされます。
# 複数のマシンでiCloudを介して写真を同期した場合に、写真.appのライブラリの写真の並び順は撮影日時どおりにならないようなので、明示的にソートしておく必要があるようです
ちなみに、写真の自作キーボードキットはこの後フットペダルにつなぎなおして、PPSSPP用の足踏みコントローラー化する予定です(「戦場の絆ポータブル」用)。
AppleScript名:Photosで選択中の写真をKeynoteの現在の書類の現在のスライド以降に配置 |
— – Created by: Takaaki Naganoya – Created on: 2019/05/26 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "AppKit" use BPlus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html use mdLib : script "Metadata Lib" version "2.0.0" –https://www.macosxautomation.com/applescript/apps/Script_Libs.html#Metadata_Lib property NSUUID : a reference to current application’s NSUUID property NSString : a reference to current application’s NSString property NSFileManager : a reference to current application’s NSFileManager tell application "Keynote" if (count every document) = 0 then return end tell –Photosで選択中の写真をすべて書き出してalias listを取得する set aList to exportSelectedPhotoOnPhotos() of me if aList = {} or aList = false then return set aLen to length of aList –書き出した画像の親フォルダを求めておく(あとで削除するため) tell application "Finder" set parentFol to parent of (item 1 of aList) end tell tell application "Keynote" tell front document tell current slide set curNum to slide number –現在表示中のスライドの番号(ページ数)を取得する end tell –Photosから取得した写真のアイテム数でループ repeat with i from 1 to aLen set aPhoto to contents of item i of aList set newSlide to make new slide at slide (curNum + i) with properties {base slide:master slide "画像(横長)"} –This item is localized!! Maybe a "Photo" set creTime to getCreationTime(aPhoto) of me tell newSlide set object text of default title item to creTime set file name of image 1 to aPhoto –place an image to image placeholder end tell –配置画像を削除 tell application "Finder" delete aPhoto –配置した写真を削除 end tell end repeat end tell end tell –あとしまつ tell application "Finder" delete parentFol –画像のダウンロードフォルダを削除 end tell –指定のaliasからExif情報の作成日の時刻情報を返す on getCreationTime(anAlias) set exifDate to readExifDateTimeOriginal(anAlias) of me return time string of exifDate end getCreationTime –Photosで選択中のファイルをtmporaryフォルダに書き出してalias listで返す on exportSelectedPhotoOnPhotos() set dtPath to (path to temporary items) as text set aUUID to NSUUID’s UUID()’s UUIDString() as text set dirPath to ((POSIX path of dtPath) & aUUID) set fileManager to NSFileManager’s defaultManager() set aRes to (fileManager’s createDirectoryAtPath:dirPath withIntermediateDirectories:true attributes:(missing value) |error|:(reference)) set dtPath to dtPath & aUUID tell application "Photos" set a to selection if a = {} then return {} set aRes to (export a to file dtPath) end tell tell application "Finder" tell folder dtPath set fList to (every file) as alias list end tell end tell if fList = {} then return false return fList end exportSelectedPhotoOnPhotos –指定JPEG画像のExif情報からDateTimeOriginalを取得してAS dateオブジェクトに変換して返す on readExifDateTimeOriginal(aTargFileAlias) set theMetadata to readMetadataFrom(aTargFileAlias) of me if theMetadata = false then return false set keysList to theMetadata’s allKeys() if "{Exif}" is not in (keysList as list) then return false set exifDate to theMetadata’s valueForKeyPath:"{Exif}.DateTimeOriginal" if exifDate = missing value then return false set a to NSString’s stringWithString:exifDate set {aDateStr, aTimeStr} to (a’s componentsSeparatedByString:" ") as list set bDateStr to repChar(aDateStr, ":", "/") of me set fullDate to date (bDateStr & " " & aTimeStr) return fullDate end readExifDateTimeOriginal –指定のファイルからメタデータを取得する on readMetadataFrom(imageFile) load framework set {theRecord, theError} to current application’s SMSForder’s metadataFromImage:imageFile |error|:(reference) if theRecord = missing value then — there was a problem, so extract the error description error false else return theRecord end if end readMetadataFrom –文字置換 on repChar(origText as string, targChar as string, repChar as string) set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to targChar set tmpList to text items of origText set AppleScript’s text item delimiters to repChar set retText to tmpList as string set AppleScript’s text item delimiters to curDelim return retText end repChar |
More from my site
(Visited 136 times, 1 visits today)
Photosで選択中の写真をKeynoteの現在の書類の現在のスライド以降に配置 v2 – AppleScriptの穴 says:
[…] 初版では写真.app(Photos)上の選択項目を一切ソートなどしなかったため、exifから取得した撮影日付で昇順ソートしています。 […]