MacBook Air/Pro/iMac搭載のFaceTime HDカメラから静止画を取り込むAppleScriptです。
QRコードの画像を取り込んで、QRコードを認識させて、URLを含んでいる場合にはWebブラウザでオープンするといったワークフローを作っておこうかと考えて書いてみました。
ただ、まだ調べ始めて日がないため、取り込み中の画像のプレビューは表示されません。FaceTime HDカメラが点灯して2秒ぐらいで何も言わずに画像取り込みされる無愛想なプログラムになっています。
本当はAVCaptureViewを用いてプレビュー表示が行われることがベストです。アラートダイアログ上にプレビューが表示できれば……そのうち、できるようになるのではないかと。
AppleScript名:FaceTimeカメラから取り込み v1.scptd |
— – Created by: Takaaki Naganoya – Created on: 2025/10/07 — – Copyright © 2025 Piyomaru Software, All Rights Reserved — use AppleScript version "2.8" use framework "Foundation" use framework "AVFoundation" use scripting additions property captureSession : missing value property stillOutput : missing value property saveURL : missing value on run set aPath to POSIX path of (choose file name) my captureStillImage(aPath) end run on captureStillImage(aPath) set saveURL to current application’s |NSURL|’s fileURLWithPath:aPath — セッション作成 set captureSession to current application’s AVCaptureSession’s alloc()’s init() captureSession’s setSessionPreset:(current application’s AVCaptureSessionPresetPhoto) — カメラデバイスを取得 set device to (current application’s AVCaptureDevice’s defaultDeviceWithMediaType:(current application’s AVMediaTypeVideo)) if device = missing value then display dialog "カメラが見つかりません。" buttons {"OK"} default button 1 return end if — 入力設定 set input to (current application’s AVCaptureDeviceInput’s deviceInputWithDevice:device |error|:(missing value)) if input = missing value then display dialog "カメラ入力を初期化できません。" buttons {"OK"} default button 1 return end if if (captureSession’s canAddInput:input) as boolean then captureSession’s addInput:input else display dialog "入力を追加できません。" buttons {"OK"} default button 1 return end if — 出力設定 set stillOutput to current application’s AVCapturePhotoOutput’s alloc()’s init() if (captureSession’s canAddOutput:stillOutput) as boolean then captureSession’s addOutput:stillOutput else display dialog "出力を追加できません。" buttons {"OK"} default button 1 return end if — セッション開始 captureSession’s startRunning() delay 1 — カメラ起動待機 — 写真設定 set photoSet to (current application’s AVCapturePhotoSettings’s photoSettings) — 撮影 (stillOutput’s capturePhotoWithSettings:photoSet delegate:me) delay 2 captureSession’s stopRunning() end captureStillImage on captureOutput:(output) didFinishProcessingPhoto:(photo) |error|:err if err ≠ missing value then display dialog "撮影エラー: " & (err’s localizedDescription() as text) return end if set imageData to photo’s fileDataRepresentation() imageData’s writeToURL:saveURL atomically:true display notification "画像を保存しました。" with title "カメラキャプチャ" end captureOutput:didFinishProcessingPhoto:|error|: |
(Visited 1 times, 1 visits today)