a little while ago we had a look at how to use applescript and sips to scale image files without the hassle of going through photoshop – see image processing with applescript II. open the terminal application, type in “man sips” and you’ll find there’s a whole bunch stuff you can do with images without ever opening photoshop — pretty cool :
… but you can play around with all that another time. today we’re focussing on extending the functionality of the image resize script from that post to make it a little more user friendly. rather than a have script that’s hard-wired to scale images to 500px high, we’ll create one that can accept user input, so that the pixel dimensions can be changed each time the script is run.
to do that we need to first create a dialog. unfortunately the dialog possibilities with standard applescript are pretty crap — particularly when compared to all the options available to applescript dialogs in InDesign – border panels, columns, rows, checkbox controls, dropdowns, enabling groups, event listeners, comboboxes, editboxes, radiobuttons, etc.
here is all you get with standard dialogs :
well, although that’s pretty diabolical, it’s still enough for what we need. here’s the first part of the script :
display dialog "enter the pixel ratio you want these scaled to" with title "resize images" default answer "800" buttons {"cancel", "wide", "high"} default button 1 set mgResult to result set mgText to text returned of mgResult set mgButton to button returned of mgResult
that’ll give us a dialog something like this :
… which gives us two pieces of information — the text entered and the button clicked – both captured into variables. if you want to make the script fool-proof, you’ll need to add some error handling to ensure that the text entered is an integer. but in its current form, the script assumes that the user is not an idiot.
the next part of the script creates a subfolder in the finder to save the transformed images into (this script creates duplicates of the original images rather than overwriting the originals with the resized versions) – then creates a reference to that folder for use later in the script :
set mgFolder to (mgText & "px") as string tell application "Finder" set mgItems to selection set mgContainer to container of item 1 of mgItems set mgContainer to mgContainer as alias if (exists folder mgFolder of folder mgContainer) is false then make folder at mgContainer with properties {name:mgFolder} end if end tell set mgFinalFolder to mgContainer & mgFolder & ":" as string
then comes the key to the adaptability of this script — altering the final sips command based on the user’s choices in the dialog. we capture this into a variable called mgScriptString :
if mgButton is "high" then set mgScriptString to "sips --resampleHeight '" & mgText & "' " else if mgButton is "wide" then set mgScriptString to "sips --resampleWidth '" & mgText & "' " end if end if
the rest of the script is pretty much as per the previous post except that we insert the mgScriptString variable into the do shell script command :
repeat with mgItem in mgItems set mgName to name of mgItem set mgFinalpath to mgFinalFolder & mgName set mgPath to POSIX path of (mgItem as text) --convert mgFinalpath to POSIX form set text item delimiters to ":" set mgFinalpath to text items 2 thru -1 of mgFinalpath set text item delimiters to "/" set mgFinalpath to mgFinalpath as string set text item delimiters to "" set mgFinalpath to quoted form of mgFinalpath try do shell script mgScriptString & quoted form of POSIX path of mgPath & " --out " & mgFinalpath do shell script "sips -m '/System/Library/ColorSync/Profiles/sRGB Profile.icc' -i " & mgFinalpath end try end repeat
wrap all that in an open handler (and delete the line “set mgItems to selection”) and you’ll have a script that looks like this :
save that as an application and whack it in your sidebar. drag and drop as many images as you like onto the app — they’ll all be scaled quicker than you could do it through photoshop. don’t worry about accidentally dropping non-image files — these just get skipped.
you can also go here to get the complete image processing script.
have a good one