Plugin de exportación para iPhoto
Apple liberó a primeros de agosto un SDK para el desarrollo de plugins para iPhoto. El SDK está disponible en el Developer Connection (es necesario login para la descarga, pero es suficiente con tener una cuenta gratuíta). El SDK por fin documenta la API de exportación, pero, como suele ocurrir en estos casos, hay un par de aspectos un poco oscuros.
Para intentar hacerme una idea de cómo puede ser el desarrollo de un plugin de este tipo, he realizado una prueba de concepto que me va a resultar de utilidad. Se trata de un plugin que exporta de una a un número indeterminado de imágenes con los siguientes condicionantes:
- Si la imagen está en formato apaisado, debe exportarla con una anchura de 800 píxeles.
- Si la imagen está en formato retrato, debe exportarla con una altura de 600 píxeles.
- En todo caso, el nombre de la imagen resultante debe seguir la siguiente plantilla: incan-nombre.jpg, donde nombre es el nombre original de la foto cuando fue importada a iPhoto.
- La imagen debe poder exportarse con o sin metadatos, siendo la exportación con metadatos la por defecto.
- La calidad de la exportación debe poder variar, aunque por defecto se eporta a la máxima.
¿Por qué estas condiciones? Porque son las que deben cumplir las imágenes de mi fotoblog.
La documentación del SDK es clara y, aparte de la descripción de la API incluye un ejemplo completo de desarrollo de un plugin algo más complejo incluso que el que yo he programado. Sin embargo, hay un par de aspectos del proceso que me apetece reseñar, por no quedar demasiado claros.
La arquitectura del plugin es bastante sencilla. Por un lado, se construye una vista, que debe ser una subclase de NSBox que adopte el protocolo ExportPluginBoxProtocol. Esa vista sólo deberá implementar un método:
-(BOOL) performKeyEquivalent: (NSEvent * ) anEvent
Ese método simplemente debe notificar al plugin cuándo se debe comenzar el proceso de exportación, normalmente tras comprobar que se ha producido una pulsación en la tecla intro, enter o la que se desee declarar.
El meollo de la lógica del plugin, no obstante, está en la clase que se declare como controlador del mismo, que debe adoptar el protocolo ExportPluginProtocol.
En realidad, la documentación es bastante adecuada, excepto en la parte en la que detalla la estructura ImageExportOptions, estructura utilizada para pasar al método que realiza la exportación final. Según la documentación, tanto el ancho como el alto son de obligatoria declaración.
Bien, pues según parece, al exportar en modo landscape basta con declarar el nuevo ancho. Sin embargo, al exportar en portrait es necesario dar ambas dimensiones, por lo que hay que calcular en qué proporción modificar ambas.
Si alguien está interesado en el código fuente del plugin, puede descargarlo del repositorio de subversion:
svn co http://svn.liadorasoft.com/incanplugin
El código es prácticamente el mismo del ejemplo del SDK, con las modificaciones necesarias para cumplir con los requisitos antes detallados (nombre de imagen exportada y dimensiones de la misma)