使用Scripting Bridge在iPhoto中创建相册并将图片导入此相册

时间:2011-05-26 16:50:06

标签: cocoa macos applescript scripting-bridge

我有一个基于文档的绘图应用程序,允许用户将最终文档保存为JPEG文件。每当用户保存JPEG时,我想将图片导入iPhoto相册“MyAppName album”。我正在使用Using Scripting Bridge,我已将iPhoto.h文件添加到我的应用程序中。我还添加了ScriptingBridge.framework

即使创建专辑“MyAppName album”,我也遇到了一些麻烦。

您能否告诉我一些以下伪代码的代码:

if (check whether "MyAppName album" exists) then
   myalbum = "MyAppName album"
else 
   myalbum = create new album "MyAppName album"
end if

add picture "/Users/myusername/myfile.jpg" to myalbum

为方便起见,我在下面添加了iPhoto.h:

/*
 * iPhoto.h
 */

#import <AppKit/AppKit.h>
#import <ScriptingBridge/ScriptingBridge.h>


@class iPhotoItem, iPhotoApplication, iPhotoColor, iPhotoDocument, iPhotoWindow, iPhotoAttributeRun, iPhotoCharacter, iPhotoParagraph, iPhotoText, iPhotoAttachment, iPhotoWord, iPhotoAlbum, iPhotoKeyword, iPhotoPhoto, iPhotoPrintSettings;

enum iPhotoSavo {
    iPhotoSavoAsk = 'ask ' /* Ask the user whether or not to save the file. */,
    iPhotoSavoNo = 'no  ' /* Do not save the file. */,
    iPhotoSavoYes = 'yes ' /* Save the file. */
};
typedef enum iPhotoSavo iPhotoSavo;

enum iPhotoView {
    iPhotoViewEdit = 'edit' /* edit */,
    iPhotoViewEvents = 'evts' /* events */,
    iPhotoViewOrganize = 'orga' /* organize */
};
typedef enum iPhotoView iPhotoView;

enum iPhotoAlTy {
    iPhotoAlTyBookAlbum = 'book' /* book album */,
    iPhotoAlTyEventsAlbum = 'eval' /* Album containing all the events in a library. */,
    iPhotoAlTyFacesAlbum = 'faal' /* Album containing all the faces in a library. */,
    iPhotoAlTyFlaggedAlbum = 'flal' /* Album containing all the flagged photos in a library. */,
    iPhotoAlTyFolderAlbum = 'fldr' /* folder album */,
    iPhotoAlTyLastImportAlbum = 'lstI' /* last import album */,
    iPhotoAlTyLastMonthsAlbum = 'lstM' /* last months album */,
    iPhotoAlTyLastRollsAlbum = 'lstR' /* last rolls album, but please use last import album now */,
    iPhotoAlTyPhotoLibraryAlbum = 'aral' /* Album containing all the photos in a library. */,
    iPhotoAlTyPlacesAlbum = 'plal' /* Album containing all the places in a library. */,
    iPhotoAlTyPublishedAlbum = 'pubs' /* published album */,
    iPhotoAlTyRegularAlbum = 'albm' /* regular album */,
    iPhotoAlTySharedAlbum = 'papa' /* album of a shared library */,
    iPhotoAlTySharedLibrary = 'papl' /* shared library; contains one or more children, which are shared albums */,
    iPhotoAlTySlideshowAlbum = 'slds' /* slideshow album */,
    iPhotoAlTySmartAlbum = 'smrt' /* smart album */,
    iPhotoAlTySubscribedAlbum = 'subs' /* subscribed album */,
    iPhotoAlTyTrashAlbum = 'tral' /* trash album */,
    iPhotoAlTyUnknownAlbumType = 'aluk' /* unknown album type */
};
typedef enum iPhotoAlTy iPhotoAlTy;

enum iPhotoEnum {
    iPhotoEnumStandard = 'lwst' /* Standard PostScript error handling */,
    iPhotoEnumDetailed = 'lwdt' /* print a detailed report of PostScript errors */
};
typedef enum iPhotoEnum iPhotoEnum;



/*
 * Standard Suite
 */

// A scriptable object.
@interface iPhotoItem : SBObject

@property (copy) NSDictionary *properties;  // All of the object's properties.

- (void) closeSaving:(iPhotoSavo)saving savingIn:(NSURL *)savingIn;  // Close an object.
- (void) delete;  // Delete an object.
- (void) duplicateTo:(SBObject *)to withProperties:(NSDictionary *)withProperties;  // Copy object(s) and put the copies at a new location.
- (BOOL) exists;  // Verify if an object exists.
- (void) moveTo:(SBObject *)to;  // Move object(s) to a new location.
- (void) saveAs:(NSString *)as in:(NSURL *)in_;  // Save an object.
- (void) addTo:(id)to;  // Add the given object to the container.
- (void) assignKeywordString:(NSString *)string;  // Assign an existing keyword to the currently-selected photos.
- (void) autoImport;  // Start importing photos from the auto-import folder.
- (void) duplicateTo:(id)to;  // Create a duplicate of an object.
- (void) emptyTrash;  // Empty the Trash album.
- (void) importFrom:(NSString *)from forceCopy:(NSInteger)forceCopy to:(iPhotoAlbum *)to;  // Import the given path.
- (iPhotoAlbum *) newAlbumName:(NSString *)name;  // Create a new album.
- (void) nextSlide;  // Skip to previous slide in currently-playing slideshow.
- (void) pauseSlideshow;  // Pause the currently-playing slideshow.
- (void) previousSlide;  // Skip to next slide in currently-playing slideshow.
- (void) removeFrom:(id)from;  // Remove the given object from its container.
- (void) resumeSlideshow;  // Resume the currently-playing slideshow.
- (void) reverseGeocode;  // Call after setting a photo's latitude and longitude.  This command instructs iPhoto to use lat/lon to look up the country, city, point of interest, etc.
- (void) select;  // Select one or more objects.
- (void) startSlideshowAsynchronous:(NSInteger)asynchronous displayIndex:(NSInteger)displayIndex iChat:(NSInteger)iChat usingAlbum:(NSString *)usingAlbum;  // Display a slideshow with the currently-selected photos or album.
- (void) stopSlideshow;  // End the currently-playing slideshow.

@end

// An application's top level scripting object.
@interface iPhotoApplication : SBApplication

- (SBElementArray *) documents;
- (SBElementArray *) windows;

@property (readonly) BOOL frontmost;  // Is this the frontmost (active) application?
@property (copy, readonly) NSString *name;  // The name of the application.
@property (copy, readonly) NSString *version;  // The version of the application.

- (iPhotoDocument *) open:(NSURL *)x;  // Open an object.
- (void) print:(NSURL *)x printDialog:(BOOL)printDialog withProperties:(iPhotoPrintSettings *)withProperties;  // Print an object.
- (void) quitSaving:(iPhotoSavo)saving;  // Quit an application.

@end

// A color.
@interface iPhotoColor : iPhotoItem


@end

// A document.
@interface iPhotoDocument : iPhotoItem

@property (readonly) BOOL modified;  // Has the document been modified since the last save?
@property (copy) NSString *name;  // The document's name.
@property (copy) NSString *path;  // The document's path.


@end

// A window.
@interface iPhotoWindow : iPhotoItem

@property NSRect bounds;  // The bounding rectangle of the window.
@property (readonly) BOOL closeable;  // Whether the window has a close box.
@property (copy, readonly) iPhotoDocument *document;  // The document whose contents are being displayed in the window.
@property (readonly) BOOL floating;  // Whether the window floats.
- (NSInteger) id;  // The unique identifier of the window.
@property NSInteger index;  // The index of the window, ordered front to back.
@property (readonly) BOOL miniaturizable;  // Whether the window can be miniaturized.
@property BOOL miniaturized;  // Whether the window is currently miniaturized.
@property (readonly) BOOL modal;  // Whether the window is the application's current modal window.
@property (copy) NSString *name;  // The full title of the window.
@property (readonly) BOOL resizable;  // Whether the window can be resized.
@property (readonly) BOOL titled;  // Whether the window has a title bar.
@property BOOL visible;  // Whether the window is currently visible.
@property (readonly) BOOL zoomable;  // Whether the window can be zoomed.
@property BOOL zoomed;  // Whether the window is currently zoomed.


@end



/*
 * Text Suite
 */

// This subdivides the text into chunks that all have the same attributes.
@interface iPhotoAttributeRun : iPhotoItem

- (SBElementArray *) attachments;
- (SBElementArray *) attributeRuns;
- (SBElementArray *) characters;
- (SBElementArray *) paragraphs;
- (SBElementArray *) words;

@property (copy) NSColor *color;  // The color of the first character.
@property (copy) NSString *font;  // The name of the font of the first character.
@property NSInteger size;  // The size in points of the first character.


@end

// This subdivides the text into characters.
@interface iPhotoCharacter : iPhotoItem

- (SBElementArray *) attachments;
- (SBElementArray *) attributeRuns;
- (SBElementArray *) characters;
- (SBElementArray *) paragraphs;
- (SBElementArray *) words;

@property (copy) NSColor *color;  // The color of the first character.
@property (copy) NSString *font;  // The name of the font of the first character.
@property NSInteger size;  // The size in points of the first character.


@end

// This subdivides the text into paragraphs.
@interface iPhotoParagraph : iPhotoItem

- (SBElementArray *) attachments;
- (SBElementArray *) attributeRuns;
- (SBElementArray *) characters;
- (SBElementArray *) paragraphs;
- (SBElementArray *) words;

@property (copy) NSColor *color;  // The color of the first character.
@property (copy) NSString *font;  // The name of the font of the first character.
@property NSInteger size;  // The size in points of the first character.


@end

// Rich (styled) text
@interface iPhotoText : iPhotoItem

- (SBElementArray *) attachments;
- (SBElementArray *) attributeRuns;
- (SBElementArray *) characters;
- (SBElementArray *) paragraphs;
- (SBElementArray *) words;

@property (copy) NSColor *color;  // The color of the first character.
@property (copy) NSString *font;  // The name of the font of the first character.
@property NSInteger size;  // The size in points of the first character.


@end

// Represents an inline text attachment.  This class is used mainly for make commands.
@interface iPhotoAttachment : iPhotoText

@property (copy) NSString *fileName;  // The path to the file for the attachment


@end

// This subdivides the text into words.
@interface iPhotoWord : iPhotoItem

- (SBElementArray *) attachments;
- (SBElementArray *) attributeRuns;
- (SBElementArray *) characters;
- (SBElementArray *) paragraphs;
- (SBElementArray *) words;

@property (copy) NSColor *color;  // The color of the first character.
@property (copy) NSString *font;  // The name of the font of the first character.
@property NSInteger size;  // The size in points of the first character.


@end



/*
 * iPhoto suite
 */

// An album.  This abstract class represents the albums within an iPhoto library.
@interface iPhotoAlbum : iPhotoItem

- (SBElementArray *) keywords;
- (SBElementArray *) photos;

@property (copy, readonly) NSArray *children;  // Array of album's children albums in the library hierarchy.
- (NSInteger) id;  // The unique ID of the album.
@property (copy) NSString *name;  // The name of the album.
@property (copy, readonly) iPhotoAlbum *parent;  // Album's parent in the library hierarchy.
@property (readonly) iPhotoAlTy type;  // Type of album.
@property (copy, readonly) NSString *url;  // URL of published/subscribed album.


@end

// iPhoto's top level scripting object.
@interface iPhotoApplication (IPhotoSuite)

- (SBElementArray *) albums;
- (SBElementArray *) keywords;
- (SBElementArray *) photos;

@property (copy) iPhotoAlbum *currentAlbum;  // The selected album.
@property (copy, readonly) iPhotoAlbum *eventsAlbum;  // Events album.
@property (copy, readonly) iPhotoAlbum *facesAlbum;  // Faces album.
@property (copy, readonly) iPhotoAlbum *flaggedAlbum;  // Flagged photos album.
@property (readonly) NSInteger importing;  // Returns true if photo importing is in progress.
@property (copy, readonly) iPhotoAlbum *lastImportAlbum;  // Last import album.
@property (copy, readonly) iPhotoAlbum *lastMonthsAlbum;  // The set of N most recently imported month(s) of photos.  N is based on the preference set in iPhoto.
@property (copy, readonly) iPhotoAlbum *lastRollsAlbum;  // Now obsolete;  please use last import album.  Old: The set of N most recently imported roll(s) of photos.  N is based on the preference set in iPhoto.
@property (copy, readonly) NSArray *localRootAlbums;  // Returns local albums that are at the root level in the source view.
@property (copy) NSString *mailAddress;  // The address for the e-mail.
@property (copy) NSString *mailRecipient;  // The recipient for the e-mail.
@property (copy) NSString *mailSubject;  // The subject for the e-mail.
@property (copy, readonly) iPhotoAlbum *photoLibraryAlbum;  // The photo library.
@property (copy, readonly) iPhotoAlbum *placesAlbum;  // Places album.
@property (copy) NSArray *selection;  // The current selection.
@property (copy, readonly) NSArray *sharedLibraryAlbums;  // Returns shared libraries from other computers on the network.
@property (readonly) NSInteger slideshowRunning;  // Returns true if a slideshow is currently running.
@property (copy, readonly) iPhotoAlbum *trashAlbum;  // The set of deleted photos.
@property iPhotoView view;  // The current view in the application.

@end

// A keyword to associate with a photo.
@interface iPhotoKeyword : iPhotoItem

@property (copy) NSString *name;  // The string value of the keyword.


@end

// A photo.
@interface iPhotoPhoto : iPhotoItem

- (SBElementArray *) keywords;

@property NSInteger altitude;  // The GPS altitude in meters;  MAXFLOAT means no altitude information.
@property (copy) NSString *comment;  // A comment about the photo.
@property (copy) NSDate *date;  // The date of the photo.
@property (copy, readonly) NSArray *dimensions;  // The width and height of the photo in pixels.
@property (readonly) NSInteger height;  // The height of the photo in pixels.
- (NSInteger) id;  // The unique ID of the photo.
@property (copy, readonly) NSString *imageFilename;  // The name of the image file.
@property (copy, readonly) NSString *imagePath;  // The path to the image file.
@property NSInteger latitude;  // The GPS latitude in range -90.0 to 90.0;  MAXFLOAT means no GPS information.  Use reverse geocode command after setting lat/lon.
@property NSInteger longitude;  // The GPS longitude in range -180.0 to 180.0;  MAXFLOAT means no GPS information.  Measurement is taken from the prime meridian, so 'west' longitudes are negative numbers.  Use reverse geocode command after setting lat/lon.
@property (copy) NSString *name;  // The name (title) of the photo.
@property (copy, readonly) NSString *originalPath;  // The path to the original image as it was imported to iPhoto.
@property NSInteger rating;  // The start rating (0 through 5).
@property (copy, readonly) NSString *thumbnailFilename;  // The name of the thumbnail file.
@property (copy, readonly) NSString *thumbnailPath;  // The path to the thumbnail file.
@property (copy) NSString *title;  // The title (name) of the photo.
@property (readonly) NSInteger width;  // The width of the photo in pixels.


@end



/*
 * Type Definitions
 */

@interface iPhotoPrintSettings : SBObject

@property NSInteger copies;  // the number of copies of a document to be printed
@property BOOL collating;  // Should printed copies be collated?
@property NSInteger startingPage;  // the first page of the document to be printed
@property NSInteger endingPage;  // the last page of the document to be printed
@property NSInteger pagesAcross;  // number of logical pages laid across a physical page
@property NSInteger pagesDown;  // number of logical pages laid out down a physical page
@property (copy) NSDate *requestedPrintTime;  // the time at which the desktop printer should print the document
@property iPhotoEnum errorHandling;  // how errors are handled
@property (copy) NSString *faxNumber;  // for fax number
@property (copy) NSString *targetPrinter;  // for target printer

- (void) closeSaving:(iPhotoSavo)saving savingIn:(NSURL *)savingIn;  // Close an object.
- (void) delete;  // Delete an object.
- (void) duplicateTo:(SBObject *)to withProperties:(NSDictionary *)withProperties;  // Copy object(s) and put the copies at a new location.
- (BOOL) exists;  // Verify if an object exists.
- (void) moveTo:(SBObject *)to;  // Move object(s) to a new location.
- (void) saveAs:(NSString *)as in:(NSURL *)in_;  // Save an object.
- (void) addTo:(id)to;  // Add the given object to the container.
- (void) assignKeywordString:(NSString *)string;  // Assign an existing keyword to the currently-selected photos.
- (void) autoImport;  // Start importing photos from the auto-import folder.
- (void) duplicateTo:(id)to;  // Create a duplicate of an object.
- (void) emptyTrash;  // Empty the Trash album.
- (void) importFrom:(NSString *)from forceCopy:(NSInteger)forceCopy to:(iPhotoAlbum *)to;  // Import the given path.
- (iPhotoAlbum *) newAlbumName:(NSString *)name;  // Create a new album.
- (void) nextSlide;  // Skip to previous slide in currently-playing slideshow.
- (void) pauseSlideshow;  // Pause the currently-playing slideshow.
- (void) previousSlide;  // Skip to next slide in currently-playing slideshow.
- (void) removeFrom:(id)from;  // Remove the given object from its container.
- (void) resumeSlideshow;  // Resume the currently-playing slideshow.
- (void) reverseGeocode;  // Call after setting a photo's latitude and longitude.  This command instructs iPhoto to use lat/lon to look up the country, city, point of interest, etc.
- (void) select;  // Select one or more objects.
- (void) startSlideshowAsynchronous:(NSInteger)asynchronous displayIndex:(NSInteger)displayIndex iChat:(NSInteger)iChat usingAlbum:(NSString *)usingAlbum;  // Display a slideshow with the currently-selected photos or album.
- (void) stopSlideshow;  // End the currently-playing slideshow.

@end

1 个答案:

答案 0 :(得分:0)

这应该可以让您将事件添加到事件中。创建相册应该只是一个额外的步骤,一旦您在应用程序中使用以下代码,这应该非常简单。

//add photos
iPhotoApplication *photoApp = [SBApplication applicationWithBundleIdentifier:kIPhotoBundleIdentifier];
iPhotoAlbum *album = [photoApp eventsAlbum];
[album importFrom:@"/Users/myusername/myfile.jpg" forceCopy:NO to:album];
//Wait until photo importing is over.
while ( [photoApp importing] );