0
votes

There are a lot of examples of converters to JPG and i am trying to change one for my needs but i need little help please. The requirements are:

  1. It should be an AppleScript Droplet. I am using Script Editor ( for some reason Automator can't run a simple droplet drag and drop function for me ).
  2. The output folder for the JPGs should not be prompted by the user .. but set as a variable in the code permanently and easly changed.
  3. The quality ( compression ) of the converted JPG should also have to be easly customisable in the code.
  4. The converted JPG files have to be converted to Color profile Adobe RGB 1998 if necessary.

I know Image Events allow us to set the JPG compression like :

save openedFile as JPEG with compression level (low|medium|high)

but unfortunately i need more customisation.

A shell script will help me to set the level from 10 to 100 but unfortunately i can't implement the shell script properly. Little help please about points 3 and 4. Thank you !

on run
    display dialog "Please drag image files to this script to turn them into JPEGs"
end run
on open draggeditems
    set End_Folder to "Macintosh HD:Users:zzz:Desktop:End"
    
    repeat with currentFile in draggeditems
        tell application "Image Events"
            set openedFile to open (currentFile as alias)
            set fileLocation to the location of openedFile
            set fileName to the name of openedFile
            set Path_to_Converted_File to (End_Folder & ":" & text 1 thru -5 of fileName & ".jpg")

            do shell script "sips --setProperty formatOptions 10 " & openedFile
            
    save openedFile as JPEG in Path_to_Converted_File
            --save openedFile as JPEG  with compression level low  in Path_to_Converted_File (low|medium|high)
            
            close openedFile
        end tell
    end repeat
end open
2

2 Answers

2
votes

Mixing up Image Events and sips is more confusing than useful, and since sips can perform the various options you are looking for (such as 3 & 4), it makes more sense to use it for everything. Setting a few variables for the various options will let you change them as needed, or if adding preferences or whatever. The sips man page will give you more details about the various options; I’ve added comments for the ones used in the following script:

on run
    open (choose file with prompt "Select image files to turn into JPEGs:" with multiple selections allowed)
end run

on open draggeditems
    set destination to (((path to desktop folder) as text) & "End:") -- folder path (trailing delimiter)
    set format to "jpeg" -- jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd | sgi | tga
    set extension to ".jpg" -- extension to match format
    set compression to 10 -- low | normal | high | best | <percent>
    set profile to quoted form of "/System/Library/ColorSync/Profiles/AdobeRGB1998.icc" -- POSIX path to color profile
    repeat with thisFile in draggeditems
        set theName to justTheName for thisFile
        set originalFile to quoted form of POSIX path of thisFile
        set convertedFile to quoted form of POSIX path of (destination & theName & extension)
        do shell script "sips -s format " & format & " -s formatOptions " & compression & " -m " & profile & space & originalFile & " --out " & convertedFile
    end repeat
end open

on justTheName for filePath
    tell application "System Events" to tell disk item (filePath as text)
        set {fileName, extension} to {name, name extension}
    end tell
    if extension is not "" then set fileName to text 1 thru -((count extension) + 2) of fileName -- just the name part
    return fileName
end justTheName

Edited to add: The shell script is expecting POSIX paths, so the aliases passed to the open handler are coerced and quoted in the event they contain spaces.

1
votes

There is a lot wrong in your script. It is not clear why you are opening the file for writing before sending it to a shell command. sips does not operate on open FILE references. sips will need to open the file from a POSIX path. I think this may do what you want (you will need to implement error checking, etc.):

on open draggeditems
    set End_Folder to "~/Desktop/End/"
    repeat with currentFile in draggeditems
        do shell script "sips --setProperty formatOptions 10 " & quoted form of POSIX path of currentFile & " --out " & End_Folder
    end repeat
end open