shellのscreencaptureコマンドを使わずにフレームワーク経由で画面キャプチャを行うAppleScriptです。
オープンソースのDSCaptureを利用しており、キャプチャ内容をファイルではなくNSImageに格納できる(メモリ上に、ファイルI/Oを経由せずに取得できる)ので、割と使い手があります。とくに、ファイルI/Oに対してはセキュリティ機能による制約が多いために、メモリ上で処理できることのメリットははかりしれません。
本サンプルScriptでは、動作確認のためにキャプチャ内容をファイルに保存していますが、本来このFrameworkの性格からいえばファイル保存するのは「特徴」を台無しにしています。キャプチャしたイメージ(NSImage)をメモリ上で加工するのに向いています。
–> Download DSCapture.framework (To ~/Library/Frameworks/)
AppleScript名:DSCaptureで画面キャプチャ |
— Created 2017-01-16 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "DSCapture" –https://github.com/kiding/DSCapture.framework use framework "AppKit" –Full Screen (Every Display) set aCapt to current application’s DSCapture’s sharedCapture()’s |full|()’s captureWithTarget:me selector:"displayCaptureData:" useCG:false –Selected Area (Selected Area Only by user operation) –set bCapt to current application’s DSCapture’s sharedCapture()’s |selection|()’s captureWithTarget:me selector:"displayCaptureData:" useCG:false –Delegate Handler on displayCaptureData:aSender set aCount to aSender’s |count|() repeat with i from 0 to (aCount – 1) set anImage to (aSender’s imageAtIndex:i) –Make Save Image Path set aDesktopPath to ((current application’s NSProcessInfo’s processInfo()’s environment()’s objectForKey:("HOME"))’s stringByAppendingString:"/Desktop/") set savePath to (aDesktopPath’s stringByAppendingString:((current application’s NSUUID’s UUID()’s UUIDString())’s stringByAppendingString:".png")) saveNSImageAtPathAsPNG(anImage, savePath) of me end repeat end displayCaptureData: –NSImageを指定パスにPNG形式で保存 on saveNSImageAtPathAsPNG(anImage, outPath) set imageRep to anImage’s TIFFRepresentation() set aRawimg to current application’s NSBitmapImageRep’s imageRepWithData:imageRep set pathString to current application’s NSString’s stringWithString:outPath set newPath to pathString’s stringByExpandingTildeInPath() set myNewImageData to (aRawimg’s representationUsingType:(current application’s NSPNGFileType) |properties|:(missing value)) set aRes to (myNewImageData’s writeToFile:newPath atomically:true) as boolean return aRes –成功ならtrue、失敗ならfalseが返る end saveNSImageAtPathAsPNG |