初心者のFileMaker pro Q&A

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。

何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

ログインしていません。

アナウンス


#1 2019-08-11 01:15:59

megu1
ゲストユーザー

[解決] アップルスクリプトでオブジェクトの反転処理について

Filemaker16で画像のデータベースを作成しております。
アップルスクリプトを用いて、オブジェクトデータの反転処理ができないか悩んでおります。

もしご存知の方がいらっしゃいましたら、お教え頂ければ幸いです。
大変お手数ですが、よろしくお願いします。

#2 2019-08-11 08:49:31

koeda
メンバー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

Macには"Image Events"という簡易画像処理コンポーネントが内蔵されています。
これをApple Scriptで制御することにより、画像処理を自動化することができます。
反転だけでなく、回転、切り取り、リサイズ、ファイル変換、アイコン作成、画像情報の取得など色々できます。
画像データベースには役に立つのでは?

https://developer.apple.com/library/arc … mages.html
https://macosxautomation.com/applescrip … index.html

画像を反転するには、たとえば以下のようなスクリプトを使用します(エラー処理などは省略)。
まずはスクリプトエディタで動作確認してみてください。
左右反転、上下反転ともにやっています。不要なら削除してください。

-- 画像の選択
set srcFile to choose file of type "public.image" with prompt ""
-- 出力先をデスクトップにする
set theOutputFolder to (path to desktop folder as string)

-- Image Eventsを起動
tell application "Image Events"
    launch
   
    --画像を開く
    set destFile to open srcFile
    tell destFile
       
        --ファイル名生成
        set theName to name
        set destFileName to "flip-" & theName
       
        --画像を裏返す(上下)
        flip with vertical
        --画像を裏返す(左右)
        flip with horizontal
       
        --保存
        save as file type in (theOutputFolder & destFileName)
       
        --画像を閉じる
        close
    end tell
end tell

1)このAppleScriptを画像データベース内のテキストフィールドに保持しておく。
2)"srcFile"(ファイル名)を画像データベース側のスクリプトで置き換える。
(上記サンプルではファイルダイアログを開いていますので、ダイレクトに指定する。)
3)「Apple Scriptを実行」ステップで2)を実行
https://fmhelp.filemaker.com/help/16/fm … -os-x.html

基本はこれで行けるのではないかと。

編集者 koeda (2019-08-14 09:17:18)

オフライン

#3 2019-08-12 12:01:40

koeda
メンバー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

画像反転(上下/左右/回転)のサンプルを作ってみました。

https://www.dropbox.com/s/v0qnwy7ek9xq5 … fmp12?dl=0
※22:05 再アップロード

1)AppleScriptを動かすので当然ですがMac限定です。(iOS, Windows不可、FM Serverも不可)
2)MojaveなどMacOSのバージョンによって、最初の1回はMacが「スクリプトの実行を許可するか?」
  という意味のダイアログを出します。OKして許可してください。
3)チャチャッと作ったのでエラー処理などは作り込んでいません。
  同名のファイルがデスクトップにあるときエラーになります。
  画像の書き出し先をデスクトップにしていますが、それもどうかと思います笑
  移植するときには、いろいろ考慮してください。
4)ログインID:Admin/PW:password

編集者 koeda (2019-08-12 22:08:18)

オフライン

#4 2019-08-12 22:13:04

koeda
メンバー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

サンプルに少し手を入れました。
・回転機能を追加
・実行するAppleScriptをスクリプトではなく計算フィールドで生成するようにしてみました。

注意点
AppleScriptに以下のようなハンドラを追加していますが、これをおまじないとして加えておかないと
Mojave環境で2回目以降の実行がエラーになるようです。

on run
    local tempScript
    copy flipImage to tempScript
    run tempScript
end run

元ネタはこちら
https://stackoverflow.com/questions/527 … its-opened

編集者 koeda (2019-08-13 07:13:25)

オフライン

#5 2019-08-16 13:15:10

megu1
ゲストユーザー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

koedaさま、いろいろとご教示いただきましてありがとうございます。

返信が遅くなって申し訳ございません。

大変お手数をおかけいたしましたが、大変助かりました。

教えていただいたスクリプトを参考にさせていただきたいとおもいます。

もし可能であれば 画像の書き出し先をデスクトップの特定のフォルダ(例えばフォルダ名を画像回転用)にできれば複数の画像を反転処理したときに後処理が楽なのですが、可能でしょうか?

#6 2019-08-16 14:38:25

koeda
メンバー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

例えば、AppleScriptの冒頭に以下のようなステップを追加すれば良いです。
(Finderに対して「デスクトップに、新規フォルダを作成し、名前を"画像回転用"としなさい」と指示)
デスクトップに"画像回転用”というフォルダがなければ新規作成し、作成ずみであれば
エラーを出さずに次のステップに移ります。

また、出力先ディレクトリを上記に合わせて"画像回転用”に変更します。
※このAppleScript内では、FileMakerと違い、パスの区切り文字が"/"ではなく":"なのでご注意を。

--デスクトップに"画像回転用"フォルダを作成(5行追加)
tell application "Finder"
    try
        make new folder at desktop with properties {name:"画像回転用"}
    end try
end tell

-- 出力先を画像回転用フォルダにする(1行変更)
set theOutputFolder to (path to desktop folder as string) & "画像回転用:"

編集者 koeda (2019-08-16 15:21:21)

オフライン

#7 2019-08-16 18:22:06

megu1
ゲストユーザー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

koedaさま

早々にご回答いただきまして誠にありがとうございます。
いただきました修正スクリプトにて調整してみましたが、デスクトップにフォルダが作成される場合とされない場合が散見されたのと、
画像回転用フォルダに保存されずにデスクトップに直接保存されるのですが、何か間違っておりますでしょうか?

お時間が有る時で構いませんので、再度ご回答いただければ幸いです。
お手数をおかけいたしますが、どうぞよろしくお願いいたします。

#8 2019-08-16 18:24:12

megu1
ゲストユーザー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

上記に加え、やはりデスクトップに同名のファイルが有った場合、エラーが出てしまいますね。
何か回避方法はございますでしょうか?
反転処理後、デスクトップに作られたファイルを消去することも可能でしょうか?

#9 2019-08-17 10:35:37

koeda
メンバー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

サンプルに手を加えましたので、そちらの環境でちゃんと動くかまずはお試しいただけますか?
デスクトップに作業用フォルダを生成し、そこにファイルを書き出すようにしてみました。

https://www.dropbox.com/s/m1c6ve6uv1w9i … fmp12?dl=0

動作不良や不明点があれば、またここで指摘、質問してください。
これで行けそうであれば、サンプルを参考に移植してください。
(サンプルでは、実際に実行するAppleScriptをグローバル計算フィールドに格納してみましたが、
これから実装される際には、再計算結果を変数に格納する方がコードがシンプルになるように思います。)

大まかな処理の流れは以下の通りです。
1)デスクトップに作業用ディレクトリを作成する →AppleScript(作業用フォルダ名は変更可)
2)1)に変換元ファイルを書き出す →FileMaker
3)2)に画像処理を加える →AppleScript
4)データベースに処理ずみ画像をインポートする →FileMaker
5)不要になったファイルを削除する →FileMaker
+作業用ディレクトリを削除する →AppleScript

AppleScriptの処理(フォルダの生成・削除、画像処理)は速く、
FileMakerの処理(ファイルのエクスポート、インポート、削除)はやや重いです。

megu1 さんの発言:

上記に加え、やはりデスクトップに同名のファイルが有った場合、エラーが出てしまいますね。
何か回避方法はございますでしょうか?

サンプルには端折って組み込んでいませんが、ちゃんとやろうと思えば、
1)ユニークなファイル名を自前で生成する(例えば日付+時分秒)
2)同名のファイルが存在しないかを調べ、存在するなら上書きして良いかダイアログで確認
3)1)と2)を組み合わせる
などの対策を講じることになるでしょう。
でも手間がかかるので、作業用フォルダを生成・削除して使うことにして、あとは運用で逃げるのも現実的かと。

編集者 koeda (2019-08-17 10:54:41)

オフライン

#10 2019-08-19 13:52:07

megu1
ゲストユーザー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

koedaさま

お忙しいなか、再度ご教示いただきまして誠にありがとうございます。
当方の環境にて移植を行えました。
お教えいただきました基本機能を元に、スクリプトを調整していきたいと思います。

お作りいただきましたファイルの中身を拝見いたしましたら、シンプルに作られていましたので大変驚いております。
私の知識、技術の未熟さを実感した次第でございます。

また今後ともどうぞよろしくお願いいたします。

#11 2019-08-19 15:52:52

megu1
ゲストユーザー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

koedaさま

度々失礼いたします。
テスト環境にて移植後、スクリプトが問題なく動くことを確認したのですが、
FMサーバーにて公開した状態で、Macのファイルメーカーproからスクリプトを作動させてみるとエラーが生じてしまいました。

具体的には「Apple Scriptの実行でエラーが生じました。」のダイアログが出ます。
原因としてはどのようなものが考えられますでしょうか?

お手数をおかけいたしますが、アドバイスいただければ幸いです。
どうぞよろしくお願いいたします。

#12 2019-08-19 17:11:33

koeda
メンバー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

まず開発/動作確認したMacと、エラーが発生したMacは同一でしょうか?

同一のMacでもエラーになる場合
→私の作成したサンプルは、当方のFileMaker Serverに公開しても動作しています。
サンプルファイルは、そちらの環境でもエラーになるでしょうか?

また、スクリプトの冒頭のエラー処理[オン]を[オフ]にして、エラーコードを表示させてみてください。
それで原因が絞り込めるかもしれません。
カスタムダイアログを表示する時、最終エラーコードと実際に実行するAppleScriptを表示させて
みるのも手がかりになると思います。

"\"AppleScriptの実行でエラーが発生しました\"。" & ¶ & Get(最終エラー) & ¶ & スクリプト::画像処理_実行

ただ本当にAppleScript内部でエラーになっている場合、FM側のスクリプトは常に-1728を返す思います。
AppleScriptのエラーコードを取得するには、実際に実行されているAppleScriptをScriptEditorにペーストして実行してみる必要があります。
実装によりますが、データベースから取得するか、デバッガで変数から実行コードを取得してください。

編集者 koeda (2019-08-19 18:32:31)

オフライン

#13 2019-08-19 19:02:00

megu1
ゲストユーザー

Re: [解決] アップルスクリプトでオブジェクトの反転処理について

koedaさま

お忙しい中ご連絡ありがとうございます。
いろいろといじっておりましたら(アクセス権限など)、うまく作動いたしました。
大変お騒がせいたしました。

この度はいろいろとご教示いただきまして誠にありがとうございました。
大変助かりました。

クィック投稿

メッセージを書いて送信してください。
登録の確認

実在の人物による登録であることを確認します。

Board footer