Applescript help for a beginner: Trying to square and modify image dimensions

Discussion in 'Mac Programming' started by o0olliw, Nov 14, 2012.

  1. o0olliw, Nov 14, 2012
    Last edited by a moderator: Nov 14, 2012

    macrumors newbie

    Joined:
    Nov 14, 2012
    #1
    Hi there,

    I'm new to this forum and also generally new to Applescript. What I've been trying to do is to create an application to 1) Square a bunch of images and save them to a folder and then 2) Load those squared images and resize them into various different dimensions. Here is my code:

    Code:
    -----------------------------------------------------------
    -----------------------------------------------------------
    -- save in Script Editor as Application
    -- drag files to its icon in Finder
    property save_folder : "Users:username:Desktop"
    property type_list : {"TIFF", "JPEG", "PNGf", "PICT"}
    property extension_list : {"tif", "tiff", "jpg", "jpeg", "png", "pict", "pct"}
    
    on open some_items
    	do shell script "mkdir -p '/Users/username/Desktop/ImageResizing'"
    	do shell script "mkdir -p '/Users/username/Desktop/ImageResizing/Squared'"
    	do shell script "mkdir -p '/Users/username/Desktop/ImageResizing/750/'"
    	
    	repeat with this_item in some_items
    		try
    			make_square(this_item)
    		end try
    	end repeat
    	
    	
    	tell application "Finder"
    		display dialog "Telling app finder"
    		set source_folder to "Macintosh HD:Users:username:Desktop:ImageResizing:Squared:" as alias
    		set a_list to every file in source_folder as alias list
    		
    		repeat with i from 1 to number of items in a_list
                            display dialog a_list
    			set a_file to (item of a_list)
    			rescale_and_save_750(a_file)
    		end repeat
    	end tell
    	
    end open
    
    
    to make_square(this_item)
    	tell application "Finder"
    		set folder_path to "Users:username:Desktop:ImageResizing:Squared:"
    		set file_path to (folder_path)
    	end tell
    	
    	tell application "Image Events"
    		launch
    		-- open the image file
    		set this_image to open this_item
    		
    		set typ to this_image's file type
    		
    		copy dimensions of this_image to {current_width, current_height}
    		if current_width is greater than current_height then
    			set pad_dimensions to {current_width, current_width}
    			pad this_image to dimensions pad_dimensions with pad color {65535, 65535, 65535}
    		else if current_height is greater than current_width then
    			set pad_dimensions to {current_height, current_height}
    			pad this_image to dimensions pad_dimensions with pad color {65535, 65535, 65535}
    		end if
    		
    	end tell
    	
    	save this_image in file_path as typ
    end make_square
    
    
    to rescale_and_save_750(this_item)
    	display dialog "I'm in 750"
    	tell application "Finder"
    		display dialog "I'm in 750"
    		set folder_path to "Users:username:Desktop:ImageResizing:750:"
    		set file_path to (folder_path)
    	end tell
    	
    	tell application "Image Events"
    		launch
    		
    		set the target_width to 750
    		-- open the image file
    		set this_image to open this_item
    		
    		set typ to this_image's file type
    		
    		set the target_width to 750
    		set the target_height to 750
    		
    		copy dimensions of this_image to {current_width, current_height}
    		if current_width is greater than target_width then
    			scale this_image to size target_width
    		else if current_height is greater than target_height then
    			scale this_image to size target_width
    		end if
    	end tell
    	
    	save this_image in file_path as typ
    	
    end rescale_and_save_750
    -----------------------------------------------------------
    -----------------------------------------------------------
    
    The place where I'm running into a problem is some where around these lines: "set a_list to every file in source_folder as alias list
    repeat with i from 1 to number of items in a_list
    display dialog a_list
    set a_file to (item of a_list)".

    It seems that the function "rescale_and_save_750" is never actually entered because the dialogue in that function never displays. I am getting an error that says "Can't make {alias "file name and path"} into type string." Does anybody know what exactly I'm doing wrong? I know that the resize to 750 function itself and the square function itself are both working seamlessly as I tried them individually and they worked. Again, I'm a newbie at this and would REALLY appreciate any help.

    --Will
     
  2. kryten2, Nov 14, 2012
    Last edited: Nov 14, 2012

    macrumors 6502a

    Joined:
    Mar 17, 2012
    Location:
    Belgium
    #2
    The error is caused by the display dialog a_list statement. Display dialog displays text and a_list is a list. There's also a couple of errors regarding specifying paths ,calling handlers and some other things.


    Tips : There's no need for 3 do shell script statements, a modified one should do the trick.
    Code:
    -- Macintosh HD:Users:username:Desktop: can be written as below statement
    (path to desktop folder as text) 
    More info : https://developer.apple.com/library/mac/#documentation/applescript/conceptual/applescriptlangguide/introduction/ASLR_intro.html#//apple_ref/doc/uid/TP40000983-CH208-SW1
    http://macscripter.net/viewtopic.php?id=25631
     
  3. thread starter macrumors newbie

    Joined:
    Nov 14, 2012
    #3
    Thanks for the reply. I really appreciate the help!

    I removed the "display dialogue a_llist" statement, and also I modified calling the handler to include "my" in front of it since it's inside a tell statement. As far as the HFS path goes, I am already doing it with the "Macintosh HD:Users:etc" I presume. The Macintosh HD is my disk.

    In all, the changes fixed some things, but now I am getting a different error. I can tell that the folder path is correct at least because it is printing out the names of the images within the "Squared folder". However, the error says: "Can't get item { name of items } of application Finder". I have narrowed down where the error takes place and I'm sure it's within these few lines:

    Code:
    set a_list to every item in source_folder	
    		repeat with i from 1 to number of items in a_list
    			set a_file to (item of a_list)
    			my rescale_and_save_750(a_file)
    		end repeat
    Any more help/thoughts would be much appreciated!

    Thanks,
    --Will
     
  4. macrumors 6502a

    Joined:
    Mar 17, 2012
    Location:
    Belgium
    #4
    Try this :


    Code:
    		repeat with a_file in a_list
    			display dialog (a_file as text)
    			my rescale_and_save_750(a_file)
    		end repeat
    Working example droplet, not everything is corrected or changed.
     

    Attached Files:

  5. thread starter macrumors newbie

    Joined:
    Nov 14, 2012
    #5
    Thanks for the reply and the example code. I used the application you created and although there were no errors, it's still not working. The "rescale_and_save_750" function is resizing the original images and not the squared images even though the source folder is the newly created squared folder. Do you know why this is?

    Again, thanks so much for the help.

    --Will
     
  6. macrumors 6502a

    Joined:
    Mar 17, 2012
    Location:
    Belgium
    #6
    Must have been tired yesterday. Try this droplet :
     

    Attached Files:

  7. thread starter macrumors newbie

    Joined:
    Nov 14, 2012
    #7
    Still not working :-/ Despite the changes, it doesn't take the newly squared photos and resize them, it still takes the original photos. Your help is so, so appreciated though.

    --Will
     

Share This Page