Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AppleScript和Automator创建图像注释工具_Applescript_Metadata_Preview_Automator - Fatal编程技术网

使用AppleScript和Automator创建图像注释工具

使用AppleScript和Automator创建图像注释工具,applescript,metadata,preview,automator,Applescript,Metadata,Preview,Automator,在Mac上,当Automator应用程序运行时,是否可以使用AppleScript/Automator在后台显示图像预览 我有数百个图像,我想添加元数据,以便它们可以显示在网站上。我的计划是创建一个与原始图像同名的*.meta文件,以便PHP脚本可以在生成图像URL的同时读取元数据 我已经创建了一个AppleScript文件(见下文),我已经将其嵌入到一个Automator应用程序中。当你在应用程序上选择文件时,它首先显示图像,然后显示3个对话框,你可以在其中输入所需的数据 问题在于,当QLMa

在Mac上,当Automator应用程序运行时,是否可以使用AppleScript/Automator在后台显示图像预览

我有数百个图像,我想添加元数据,以便它们可以显示在网站上。我的计划是创建一个与原始图像同名的
*.meta
文件,以便PHP脚本可以在生成图像URL的同时读取元数据

我已经创建了一个AppleScript文件(见下文),我已经将其嵌入到一个Automator应用程序中。当你在应用程序上选择文件时,它首先显示图像,然后显示3个对话框,你可以在其中输入所需的数据

问题在于,当QLManager预览窗口打开时,AppleScript被阻止。在输入所需的数据之前,您需要关闭窗口,以便无法再看到图像

是否有办法将QLManager进程发送到后台,以便在图像打开时显示对话框窗口

或者,也许已经有一个免费的Mac OS工具,它已经允许你做我希望做的事情

tell application "Finder"
    set the_selection to the selection
end tell

set file_types to {"jpg", "png", "gif", "mp4"}
set copyright to "© 2015 CompanyName"
set signature to "Signature"

repeat with ii from 1 to the count of the_selection

    set {posix_path, file_path, file_name, file_ext} to splitPath(item ii of the_selection)

    if file_types contains file_ext then
        set meta_path to file_path & file_name & ".meta"
        tell application "Finder"
            if not (exists file (meta_path)) then
                do shell script "qlmanage -t -s 640 " & posix_path

                set alt_text to the text returned of (display dialog "alt" default answer file_name)
                set copyright to the text returned of (display dialog "©" default answer copyright)
                set signature to the text returned of (display dialog "signature" default answer signature)

                set meta_text to "alt " & alt_text & return & "copyright " & copyright & return & "signature " & signature

                set meta_file to open for access meta_path with write permission
                write meta_text to meta_file
                close access meta_file

            end if
        end tell
    end if
end repeat

on splitPath(selected_item)
    tell application "System Events"
        set posix_path to POSIX path of (selected_item as alias)
        set posix_path to quoted form of posix_path
    end tell

    set file_path to selected_item as string

    set file_ext to ""
    set file_name to ""

    set text item delimiters to "."
    if (count text items of file_path) > 1 then
        set file_ext to last text item of file_path
        set file_path to (text items 1 through -2 of file_path) as string
    end if

    set text item delimiters to ":"
    if (count text items of file_path) > 1 then
        set file_name to last text item of file_path
        set file_path to ((text items 1 through -2 of file_path) as string) & ":"
    end if

    return {posix_path, file_path, file_name, file_ext}
end splitPath

您应该能够通过在shell脚本中添加符号和将其发送到后台。但是,使用AppleScript的
DoShell脚本
,您还需要将输出重定向到某个地方。在您的情况下,类似这样的方法应该会起作用:

do shell script "qlmanage -t -s 640 " & posix_path & "&>/dev/null &"
这将如何影响这个特定的应用程序将取决于该应用程序

以下是AppleScript中的一个简单示例:

do shell script "say Hello. You can see the dialog while I speak. &>/dev/null &"
display dialog "Back from shell script."
&
将输出重定向到/dev/null(也就是说,基本上不重定向到任何地方),而
&
将脚本发送到后台。我将输出发送到/dev/null,因为
say
命令没有输出。在您的情况下,如果有有用的输出,您可能希望将完整路径放在可以看到的地方,例如
/Users/YOURUSERNAME/Desktop/qlmanager.txt


关于在AppleScript中使用shell脚本的更多信息,请访问

我编写了一个应用程序,它完成了在Script Editor.app中使用ApplescriptOBJc所做的大部分工作(主要是为了查看它有多容易)

  • 获取选定的图像
  • 用信息填充文本字段
  • 显示每个图像
  • 写入元文件
ApplescriptOBJc是Applescript和Objective-c之间的语法桥梁语言

这种语言允许您访问Objective-c的强大功能,并在同一代码中与Applescript一起使用它

我唯一没有添加的是检查视频文件

但由于这是一个示例/入门代码,您应该能够很容易地做到这一点

我通常也会使用ApplescriptOBJc来编写文件,但使用您的代码是为了熟悉

代码应该足够简单,可以跟踪、更改、添加或移动UI对象,也可以更改或更新其逻辑

将代码转换为新的脚本编辑器文档。然后将其保存为保持打开的应用程序

应用程序的代码:



运行应用程序:

保存后,将其作为普通应用程序运行

您也可以在脚本编辑器中运行它,但必须使用alt+运行按钮、alt+R或使用菜单脚本->运行应用程序来运行它



为了不污染此代码的原始版本,我添加了此作为第二个答案


最初的OP包含mp4类型的文件,而我的原始版本没有解决这个问题,这让我有点担心

我还想有一种方法,可以在不必在文件系统中删除的情况下覆盖meta文件

最后,一些反馈会很好

最困难的部分是找出如何从mp4视频文件中获取图像

我本可以使用Objective-C framworks来实现“AV”,但老实说,我在我给自己的时间框架内努力想清楚这一切,最后我记得unix QuickLook命令qlmange实际上可以为我们做到这一点

因此,视频图像快照将写入用户tmp文件夹,并从那里在图像查看器中引用。塔达

同样,这是一个工作示例,与任何示例一样,最终用户可能需要根据自己的需要进行调整

主要变化


  • 添加了接受mp4的文件类型
  • 添加了一个反馈文本区域
  • 添加了覆盖文件选项
  • 已更新图像计数器以包含该文件 名字



只是为了补充杰瑞给你的好建议。。。在重复循环结束时,您需要在显示下一个图像之前关闭QLManager窗口。要做到这一点,您可以使用:do shell脚本“killall qlmanager”。哇!完整的应用程序源代码作为答案!谢谢。不过,我一定是误解了怎么处理它。我仍然在运行MacOS10.8.5。我假设Script Editor.app是指Utilities文件夹中的AppleScript Editor.app。我将您的代码粘贴到一个新的脚本窗口中,并选择了
Save…
,选择Application作为格式,[x]在选中run handler后保持打开状态。但我马上就在第一行出现了一个错误:“使用脚本添加”。我猜您正在使用不同的应用程序或Mac OS X的不同版本。任何有助于我实现此功能的其他详细信息都将受到欢迎。@JamesNewton啊您在问题中没有这样说。因此,假设您使用的是10.10.x,我再也没有10.8.5版本了。虽然我确信它可以为10.8.5进行编辑,但我无法测试itOK。是时候探索约塞米蒂了。。。非常感谢您给我这个意想不到的礼物。非常有用的回答为使用ASObjC创建动态UI提供了有用的见解。干得好!
    -- Copyright 2015 {Mark Hunte}. All rights reserved.

    use scripting additions
    use framework "Foundation"
    use framework "cocoa"
    use framework "AppKit"

    --- set up window
    property buttonWindow : class "NSWindow"
    property theImage : class "NSImage"
    property theImageView : class "NSImageView"

    property altLabelField : class "NSTextField"
    property altField : class "NSTextField"
    property copyrightField : class "NSTextField"
    property sigField : class "NSTextField"

    property countLabelField : class "NSTextField"

    property the_selection : {}
    property imageList : {} --  holds NSImage instances
    property imageListSplit : {} -- to use for file when needing an alias 
    property thisImage : 0
    property imageCount : 0

    property copyright : "© 2015 CompanyName"
    property signature : "Signature"


    set height to 700
    set width to 1000
    set winRect to current application's NSMakeRect(0, 0, width, height)
    set buttonWindow to current application's NSWindow's alloc()'s initWithContentRect:winRect styleMask:7 backing:2 defer:false
    buttonWindow's setFrameAutosaveName:"buttonWindow"

    --set up buttons

    set writeButtonFrame to current application's NSMakeRect(105, (height - 230), 100, 25) -- button rect origin ,x,y ,size width,hieght
    set writeBtn to current application's NSButton's alloc's initWithFrame:writeButtonFrame -- init button

    writeBtn's setTitle:"write file"
    set writeBtn's bezelStyle to 12 --NSRoundedBezelStyle
    writeBtn's setButtonType:0 --NSMomentaryLightButton
    writeBtn's setTarget:me
    writeBtn's setAction:"writeFile:"



    set nextButtonFrame to current application's NSMakeRect(105, (height - 675), 50, 25) -- button rect origin ,x,y ,size width,hieght
    set nextBtn to current application's NSButton's alloc's initWithFrame:nextButtonFrame -- init button

    nextBtn's setTitle:"Next"
    set nextBtn's bezelStyle to 12 --NSRoundedBezelStyle
    nextBtn's setButtonType:0 --NSMomentaryLightButton
    nextBtn's setTarget:me
    nextBtn's setAction:"nextImage:"


    --


    set prevButtonFrame to current application's NSMakeRect(25, (height - 675), 50, 25)
    set prevBtn to current application's NSButton's alloc's initWithFrame:prevButtonFrame

    prevBtn's setTitle:"Prev"
    set prevBtn's bezelStyle to 12 --NSRoundedBezelStyle
    prevBtn's setButtonType:0 --NSMomentaryLightButton
    prevBtn's setTarget:me
    prevBtn's setAction:"previousImage:"

    ---


    set selectionButtonFrame to current application's NSMakeRect((width - 715), (height - 690), 150, 25)
    set selectionBtn to current application's NSButton's alloc's initWithFrame:selectionButtonFrame

    selectionBtn's setTitle:"Select new Images"
    set selectionBtn's bezelStyle to 12 --NSRoundedBezelStyle
    selectionBtn's setButtonType:0 --NSMomentaryLightButton
    selectionBtn's setTarget:me
    selectionBtn's setAction:"finderSelection:"
    --

    set terminatButtonFrame to current application's NSMakeRect((width - 90), (height - 690), 75, 25)
    set terminateBtn to current application's NSButton's alloc's initWithFrame:terminatButtonFrame

    terminateBtn's setTitle:"Quit"
    set terminateBtn's bezelStyle to 12 --NSRoundedBezelStyle
    terminateBtn's setButtonType:0 --NSMomentaryLightButton
    terminateBtn's setTarget:me
    terminateBtn's setAction:"terminateMe"
    --

    -- add buttons to the window

    buttonWindow's contentView's addSubview:nextBtn
    buttonWindow's contentView's addSubview:prevBtn
    buttonWindow's contentView's addSubview:selectionBtn
    buttonWindow's contentView's addSubview:terminateBtn
    buttonWindow's contentView's addSubview:writeBtn

    --

    -- set up image view

    set imageViewFrame to current application's NSMakeRect(300, (height - 660), 640, 640) --origin ,x,y ,size width,hieght
    set theImageView to current application's NSImageView's alloc()'s initWithFrame:imageViewFrame
    theImageView's setImageFrameStyle:1

    -- add image view to the window
    buttonWindow's contentView's addSubview:theImageView


    -- activate the window
    buttonWindow's makeKeyAndOrderFront:buttonWindow



    --- set alt label

    set altLabelFrame to current application's NSMakeRect(25, (height - 60), 100, 25) --origin ,x,y ,size width,hieght
    set altLabelField to current application's NSTextField's alloc()'s initWithFrame:altLabelFrame


    altLabelField's setStringValue:"alt"
    altLabelField's setBezeled:false
    altLabelField's setDrawsBackground:false
    altLabelField's setEditable:false
    altLabelField's setSelectable:false

    -- set up alt textField 

    set altFieldFrame to current application's NSMakeRect(25, (height - 80), 240, 25) --origin ,x,y ,size width,hiegh
    set altField to current application's NSTextField's alloc()'s initWithFrame:altFieldFrame

    ---


    --- set copyright label

    set copyrightLabelFrame to current application's NSMakeRect(25, (height - 110), 100, 25) --origin ,x,y ,size width,hieght
    set copyrightLabelField to current application's NSTextField's alloc()'s initWithFrame:copyrightLabelFrame

    copyrightLabelField's setStringValue:"©opyright"
    copyrightLabelField's setBezeled:false
    copyrightLabelField's setDrawsBackground:false
    copyrightLabelField's setEditable:false
    copyrightLabelField's setSelectable:false


    -- set up copyright textFields

    set copyrightFieldFrame to current application's NSMakeRect(25, (height - 130), 240, 25) --origin ,x,y ,size width,hieght
    set copyrightField to current application's NSTextField's alloc()'s initWithFrame:copyrightFieldFrame


    --- set sig label

    set sigLabelFrame to current application's NSMakeRect(25, (height - 160), 100, 25) --origin ,x,y ,size width,hieght
    set sigLabelField to current application's NSTextField's alloc()'s initWithFrame:sigLabelFrame

    sigLabelField's setStringValue:"signature"
    sigLabelField's setBezeled:false
    sigLabelField's setDrawsBackground:false
    sigLabelField's setEditable:false
    sigLabelField's setSelectable:false
    sigLabelField's setDelegate:me


    -- set up sig textFields

    set sigFieldFrame to current application's NSMakeRect(25, (height - 180), 240, 25) --origin ,x,y ,size width,hieght
    set sigField to current application's NSTextField's alloc()'s initWithFrame:sigFieldFrame



    --- set image count label

    set countLabelFrame to current application's NSMakeRect(500, (height - 25), 100, 25) --origin ,x,y ,size width,hieght
    set countLabelField to current application's NSTextField's alloc()'s initWithFrame:countLabelFrame
    countLabelField's setStringValue:"0"
    countLabelField's setBezeled:false
    countLabelField's setDrawsBackground:false
    countLabelField's setEditable:false
    countLabelField's setSelectable:false


    --


    buttonWindow's contentView's addSubview:altLabelField
    buttonWindow's contentView's addSubview:altField

    buttonWindow's contentView's addSubview:copyrightLabelField
    buttonWindow's contentView's addSubview:copyrightField

    buttonWindow's contentView's addSubview:sigLabelField
    buttonWindow's contentView's addSubview:sigField

    buttonWindow's contentView's addSubview:countLabelField
    ---

   my finderSelection:(missing value)


    ---
    on nextImage:sender
        buttonWindow's makeFirstResponder:(missing value)
        if thisImage is not greater than imageCount and thisImage is not equal to imageCount then

            set thisImage to thisImage + 1

            theImageView's setImage:(item thisImage of imageList)

        end if
        setUpTextFieldsStrings()
    end nextImage:

    on previousImage:sender
        buttonWindow's makeFirstResponder:(missing value)
        if thisImage is less than 1 or thisImage is not equal to 1 then
            set thisImage to thisImage - 1

            theImageView's setImage:(item thisImage of imageList)
        end if
        setUpTextFieldsStrings()
    end previousImage:

    on setUpTextFieldsStrings()

        tell application "Finder" to set file_name to displayed name of ((item thisImage of imageListSplit) as alias)
        set altField's stringValue to file_name
        set copyrightField's stringValue to copyright
        set sigField's stringValue to signature


        set countLabelField's stringValue to (thisImage & " of " & (count of imageListSplit) as string)
    end setUpTextFieldsStrings

    on writeFile:sender
        buttonWindow's makeFirstResponder:(missing value)
        set {posix_path, file_path, file_name, file_ext} to splitPath(item thisImage of imageListSplit)
        set meta_path to file_path & file_name & ".meta"
        tell application "Finder"
            if not (exists file (meta_path)) then

                set alt_text to altField's stringValue
                set copyrightText to copyrightField's stringValue
                set signatureText to sigField's stringValue

                set meta_text to "alt " & alt_text & return & "copyright " & copyrightText & return & "signature " & signatureText

                set meta_file to open for access meta_path with write permission
                write meta_text to meta_file
                close access meta_file

            end if
        end tell
    end writeFile:

    on finderSelection:sender
        buttonWindow's makeFirstResponder:(missing value)
        set the_selection to {}
        set imageList to {}
        set imageListSplit to {}

        set imageCount to 0

        set thisImage to 0

        using terms from application "Finder"
            set the_selection to (choose file with prompt "Please select   images:" with multiple selections allowed without invisibles)
        end using terms from

        repeat with i from 1 to number of items in the_selection

            set this_item to (POSIX path of (item i of the_selection as alias))

            set workSpace to current application's NSWorkspace's sharedWorkspace
            set type to (workSpace's typeOfFile:this_item |error|:(missing value))

            if (workSpace's type:type conformsToType:"public.image") then


                set end of imageList to (current application's NSImage's alloc()'s initWithContentsOfFile:this_item)
                set end of imageListSplit to item i of the_selection
            end if

        end repeat



        if imageList is not {} then
            set imageCount to count of imageList
            theImageView's setImage:(item 1 of imageList)

            set thisImage to 1
            my setUpTextFieldsStrings()
        end if

    end finderSelection:


    on terminateMe()

        tell me to quit
    end terminateMe


    on splitPath(selected_item)

        tell application "System Events"
            set posix_path to POSIX path of (selected_item as alias)
            set posix_path to quoted form of posix_path
        end tell

        set file_path to selected_item as string

        set file_ext to ""
        set file_name to ""

        set text item delimiters to "."
        if (count text items of file_path) > 1 then
            set file_ext to last text item of file_path
            set file_path to (text items 1 through -2 of file_path) as string
        end if

        set text item delimiters to ":"
        if (count text items of file_path) > 1 then
            set file_name to last text item of file_path
            set file_path to ((text items 1 through -2 of file_path) as string) & ":"
        end if

        return {posix_path, file_path, file_name, file_ext}
    end splitPath
-- Copyright 2015 {Mark Hunte}. All rights reserved.

use scripting additions
use framework "Foundation"
use framework "cocoa"
use framework "AppKit"

--- set up window
property buttonWindow : class "NSWindow"
property theImage : class "NSImage"
property theImageView : class "NSImageView"

property altLabelField : class "NSTextField"
property altField : class "NSTextField"
property copyrightField : class "NSTextField"
property sigField : class "NSTextField"
property feedBacklField : class "NSTextField"

property countLabelField : class "NSTextField"

property the_selection : {}
property imageList : {} --  holds NSImage instances
property imageListSplit : {} -- to use for file when needing an alias 
property thisImage : 0
property imageCount : 0

property copyright : "© 2015 CompanyName"
property signature : "Signature"
property checkBoxOverWriteBtn : class "NSButton"


property NSFileManager : class "NSFileManager"

property file_types : {"public.mpeg-4", "public.image"}

set NSFileManager to current application's NSFileManager's defaultManager
set height to 700
set width to 1000
set textFieldGap to 10
set labelFiieldGap to 5
set winRect to current application's NSMakeRect(0, 0, width, height)
set buttonWindow to current application's NSWindow's alloc()'s initWithContentRect:winRect styleMask:7 backing:2 defer:false
buttonWindow's setFrameAutosaveName:"buttonWindow"

--set up buttons

set writeButtonFrame to current application's NSMakeRect(155, (height - 270), 100, 25) -- button rect origin ,x,y ,size width,hieght
set writeBtn to current application's NSButton's alloc's initWithFrame:writeButtonFrame -- init button

writeBtn's setTitle:"write file"
set writeBtn's bezelStyle to 12 --NSRoundedBezelStyle
writeBtn's setButtonType:0 --NSMomentaryLightButton
writeBtn's setTarget:me
writeBtn's setAction:"writeFile:"


--

set checkBoxOverWriteButtonFrame to current application's NSMakeRect(25, (height - 240), 185, 50) -- button rect origin ,x,y ,size width,hieght
set checkBoxOverWriteBtn to current application's NSButton's alloc's initWithFrame:checkBoxOverWriteButtonFrame -- init button

checkBoxOverWriteBtn's setTitle:"Overight meta file if it Exists"

checkBoxOverWriteBtn's setButtonType:3 --NSSwitchButtonn
checkBoxOverWriteBtn's setTarget:me
--checkBoxOverWriteBtn's setAction:"checkBoxOverWriteFileSetState:"
checkBoxOverWriteBtn's setState:0
checkBoxOverWriteBtn's setAlignment:0
checkBoxOverWriteBtn's setImagePosition:3


set nextButtonFrame to current application's NSMakeRect(105, (height - 675), 50, 25) -- button rect origin ,x,y ,size width,hieght
set nextBtn to current application's NSButton's alloc's initWithFrame:nextButtonFrame -- init button

nextBtn's setTitle:"Next"
set nextBtn's bezelStyle to 12 --NSRoundedBezelStyle
nextBtn's setButtonType:0 --NSMomentaryLightButton
nextBtn's setTarget:me
nextBtn's setAction:"nextImage:"


--


set prevButtonFrame to current application's NSMakeRect(25, (height - 675), 50, 25)
set prevBtn to current application's NSButton's alloc's initWithFrame:prevButtonFrame

prevBtn's setTitle:"Prev"
set prevBtn's bezelStyle to 12 --NSRoundedBezelStyle
prevBtn's setButtonType:0 --NSMomentaryLightButton
prevBtn's setTarget:me
prevBtn's setAction:"previousImage:"

---


set selectionButtonFrame to current application's NSMakeRect((width - 715), (height - 690), 150, 25)
set selectionBtn to current application's NSButton's alloc's initWithFrame:selectionButtonFrame

selectionBtn's setTitle:"Select new Images"
set selectionBtn's bezelStyle to 12 --NSRoundedBezelStyle
selectionBtn's setButtonType:0 --NSMomentaryLightButton
selectionBtn's setTarget:me
selectionBtn's setAction:"finderSelection:"
--

set terminatButtonFrame to current application's NSMakeRect((width - 90), (height - 690), 75, 25)
set terminateBtn to current application's NSButton's alloc's initWithFrame:terminatButtonFrame

terminateBtn's setTitle:"Quit"
set terminateBtn's bezelStyle to 12 --NSRoundedBezelStyle
terminateBtn's setButtonType:0 --NSMomentaryLightButton
terminateBtn's setTarget:me
terminateBtn's setAction:"terminateMe"
--

-- add buttons to the window

buttonWindow's contentView's addSubview:nextBtn
buttonWindow's contentView's addSubview:prevBtn
buttonWindow's contentView's addSubview:selectionBtn
buttonWindow's contentView's addSubview:terminateBtn
buttonWindow's contentView's addSubview:writeBtn
buttonWindow's contentView's addSubview:checkBoxOverWriteBtn

--

-- set up image view

set imageViewFrame to current application's NSMakeRect(300, (height - 660), 640, 640) --origin ,x,y ,size width,hieght
set theImageView to current application's NSImageView's alloc()'s initWithFrame:imageViewFrame
theImageView's setImageFrameStyle:1

-- add image view to the window
buttonWindow's contentView's addSubview:theImageView


-- activate the window
buttonWindow's makeKeyAndOrderFront:buttonWindow



--- set alt label

set altLabelFrame to current application's NSMakeRect(25, (height - 60), 100, 25) --origin ,x,y ,size width,hieght

set altLabelField to current application's NSTextField's alloc()'s initWithFrame:altLabelFrame


altLabelField's setStringValue:"alt"
altLabelField's setBezeled:false
altLabelField's setDrawsBackground:false
altLabelField's setEditable:false
altLabelField's setSelectable:false

-- set up alt textField 

set altFieldFrame to current application's NSMakeRect(25, ((height - 105)), 240, 50) --origin ,x,y ,size width,hiegh

set altField to current application's NSTextField's alloc()'s initWithFrame:altFieldFrame

---


--- set copyright label

set copyrightLabelFrame to current application's NSMakeRect(25, (height - 130), 100, 25) --origin ,x,y ,size width,hieght
set copyrightLabelField to current application's NSTextField's alloc()'s initWithFrame:copyrightLabelFrame

copyrightLabelField's setStringValue:"©opyright"
copyrightLabelField's setBezeled:false
copyrightLabelField's setDrawsBackground:false
copyrightLabelField's setEditable:false
copyrightLabelField's setSelectable:false


-- set up copyright textFields

set copyrightFieldFrame to current application's NSMakeRect(25, (height - 150), 240, 25) --origin ,x,y ,size width,hieght
set copyrightField to current application's NSTextField's alloc()'s initWithFrame:copyrightFieldFrame


--- set sig label

set sigLabelFrame to current application's NSMakeRect(25, (height - 180), 100, 25) --origin ,x,y ,size width,hieght
set sigLabelField to current application's NSTextField's alloc()'s initWithFrame:sigLabelFrame

sigLabelField's setStringValue:"signature"
sigLabelField's setBezeled:false
sigLabelField's setDrawsBackground:false
sigLabelField's setEditable:false
sigLabelField's setSelectable:false
sigLabelField's setDelegate:me


-- set up sig textFields

set sigFieldFrame to current application's NSMakeRect(25, (height - 200), 240, 25) --origin ,x,y ,size width,hieght
set sigField to current application's NSTextField's alloc()'s initWithFrame:sigFieldFrame



--- set image count label

set countLabelFrame to current application's NSMakeRect(320, (height - 25), 560, 25) --origin ,x,y ,size width,hieght
set countLabelField to current application's NSTextField's alloc()'s initWithFrame:countLabelFrame
countLabelField's setStringValue:"-"
countLabelField's setAlignment:2 --center
countLabelField's setBezeled:false
countLabelField's setDrawsBackground:false
countLabelField's setEditable:false
countLabelField's setSelectable:false


--


buttonWindow's contentView's addSubview:altLabelField
buttonWindow's contentView's addSubview:altField

buttonWindow's contentView's addSubview:copyrightLabelField
buttonWindow's contentView's addSubview:copyrightField

buttonWindow's contentView's addSubview:sigLabelField
buttonWindow's contentView's addSubview:sigField

buttonWindow's contentView's addSubview:countLabelField
---

--my finderSelection:(missing value)

set feedBacklFrame to current application's NSMakeRect(25, (height - 450), 240, 120) --origin ,x,y ,size width,hieght
set feedBacklField to current application's NSTextField's alloc()'s initWithFrame:feedBacklFrame
feedBacklField's setStringValue:""
feedBacklField's setEditable:false

buttonWindow's contentView's addSubview:feedBacklField
---
on nextImage:sender
    feedBacklField's setStringValue:""
    if thisImage is not greater than imageCount and thisImage is not equal to imageCount then

        set thisImage to thisImage + 1

        theImageView's setImage:(item thisImage of imageList)

    end if
    setUpTextFieldsStrings()
end nextImage:

on previousImage:sender
    feedBacklField's setStringValue:""
    if thisImage is less than 1 or thisImage is not equal to 1 then
        set thisImage to thisImage - 1

        theImageView's setImage:(item thisImage of imageList)
    end if
    setUpTextFieldsStrings()
end previousImage:

on setUpTextFieldsStrings()

    --tell application "Finder" to set file_name to displayed name of ((item thisImage of imageListSplit) as alias)

    set theSender to (current application's NSString's stringWithString:("setuptFields" as string))
    set {thisFile_name, file_ext} to splitPath((item thisImage of imageListSplit), theSender)

    set altField's stringValue to thisFile_name
    set copyrightField's stringValue to copyright
    set sigField's stringValue to signature

    --display dialog (  file_ext as string)
    set countLabelField's stringValue to ((thisFile_name as string) & "." & file_ext as string) & "   -|-  " & (thisImage & " of " & (count of imageListSplit) as string)

end setUpTextFieldsStrings

on writeFile:sender

    set {posix_path, file_path, file_name, file_ext} to splitPath((item thisImage of imageListSplit), sender)
    set meta_path to file_path & file_name & ".meta"

    ---display dialog meta_path
    set overWriteState to ""
    set overWriteState to checkBoxOverWriteBtn's state
    set alreadyExists to false

    set alreadyExists to NSFileManager's fileExistsAtPath:meta_path

    if alreadyExists then
        if not overWriteState then
            set success to (file_name as string) & ".meta " & return & return & "Already exists in this location" & return & "It was not Overwritten"
            feedBacklField's setStringValue:(success as string)
            return
        end if
    end if

    set alt_text to altField's stringValue
    set copyrightText to copyrightField's stringValue
    set signatureText to sigField's stringValue



    set meta_text to "alt " & alt_text & return & "copyright " & copyrightText & return & "signature " & signatureText

    set writeString to current application's NSString's stringWithString:meta_text
    set stringEncoding to 4
    --set success to writeString's writeToFile:(POSIX path of meta_path) atomically:true encoding:stringEncoding |error|:(missing value)

    set theData to writeString's dataUsingEncoding:stringEncoding

    --SETTING THE TYPECODE AS (unsigned long = 1413830740 )plain text allows QuickLook to read the file and TextEdit.app open it as default
    set theAttributes to current application's NSDictionary's dictionaryWithDictionary:{NSFileHFSTypeCode:1.41383074E+9}


    set success to NSFileManager's createFileAtPath:(POSIX path of meta_path) |contents|:theData attributes:theAttributes
    if success then
        if alreadyExists then
            set writenOut to "Already exists and was Overwritten"
        else
            set writenOut to "Was written to file"
        end if
        set success to (file_name as string) & ".meta " & return & return & writenOut
    else
        set success to "Error: " & (file_name as string) & ".meta " & return & return & "Was not written to file"
    end if
    feedBacklField's setStringValue:(success as string)

    --end tell
end writeFile:

on finderSelection:sender

    set the_selection to {}
    set imageList to {}
    set imageListSplit to {}

    set imageCount to 0

    set thisImage to 0

    using terms from application "Finder"
        set the_selection to (choose file with prompt "Please select   images:" with multiple selections allowed without invisibles)
    end using terms from

    repeat with i from 1 to number of items in the_selection

        set this_item to (POSIX path of (item i of the_selection as alias))

        set workSpace to current application's NSWorkspace's sharedWorkspace
        set type to (workSpace's typeOfFile:this_item |error|:(missing value))


        --Check_types

        repeat with ii from 1 to number of items in file_types
            set this_type to item ii of file_types
            if (workSpace's type:type conformsToType:this_type) then


                set end of imageListSplit to item i of the_selection
                if this_type is "public.mpeg-4" then
                    tell application "System Events" to set save_path to POSIX path of (temporary items folder)
                    do shell script ("/usr/bin/qlmanage -t -s640 " & quoted form of this_item & space & " -o " & quoted form of save_path)

                    set theSender to (current application's NSString's stringWithString:("videoFile" as string))
                    set {movieFileName} to splitPath((item i of the_selection), theSender)


                    set end of imageList to (current application's NSImage's alloc()'s initWithContentsOfFile:(save_path & "/" & movieFileName & ".png" as string))

                else
                    set end of imageList to (current application's NSImage's alloc()'s initWithContentsOfFile:this_item)
                end if
                exit repeat
            end if
        end repeat

    end repeat



    if imageList is not {} then
        set imageCount to count of imageList
        theImageView's setImage:(item 1 of imageList)

        set thisImage to 1
        my setUpTextFieldsStrings()
    end if

end finderSelection:


on terminateMe()

    tell me to quit
end terminateMe

on splitPath(selected_item, sender)
    set file_ext to ""
    set file_name to ""
    set posix_path to ""

    set posix_path to POSIX path of (selected_item as alias)
    set posix_path to current application's NSString's stringWithString:(posix_path as string)

    set file_path to ((posix_path's stringByDeletingLastPathComponent) as string) & "/"
    set file_name to posix_path's lastPathComponent
    set file_ext to file_name's pathExtension
    set file_name to file_name's stringByDeletingPathExtension

    if (sender's className as string) is "NSButton" then

        return {posix_path, file_path, file_name, file_ext}

    else if ((sender as string) is "setuptFields") then

        return {file_name, file_ext}

    else if ((sender as string) is "videoFile") then

        return {posix_path's lastPathComponent}
    end if
end splitPath