Como ya sabemos, Alfresco tiene muchas posibilidades de manipulación y transformación de ficheros/documentos. Una de las cosas más flexibles es el uso de transformadores que puden ser de dos tipos básicamente:
- Llamadas directas a algún comando o utilidad del sistema
- Desarrollar una clase Java que realice la transformación
Aquí vamos a ver la primera para utilizar la transformación de fotografías tomadas en formato RAW (o bruto como generalmente se llama) a TIFF y a JPEG. Actualmente hago fotos con Nikon y Olympus y me interesa pasar el formato NEF (por poner el de Nikon) a TIFF y a JPEG. ImageMagick puede hacerlo pero me ha dado problemas tanto en el resultado (no se pueden ver) como en la propia conversión por lo que voy a usar otra utilidad que existe para Linux, Mac OS X y Windows.
Esta utilidad se llama dcraw y podemos bajarla de http://www.cybercom.net/~dcoffin/dcraw/ para el sistema operativo que tengamos. En este caso voy a utilizar la que hay para Windows compilada con MingW desde la dirección http://www.rawness.es/dcraw/?lang=es
Una vez instalada o descomprimida en el directorio que nos guste obtendremos el programa ejecutable dcraw.exe
Bien, ahora a configurar el transformador…
Toda la configuración se basa en un bean llamado RuntimeExecutableContentTransformer para versiones anteriore a la 3.2 de Alfresco o RuntimeExecutableContentTransformeWorker para las siguientes. A su vez este bean contiene las siguientes propiedades principales:
- transformCommand: Define el comando y parámetros usando variables como ${source} y ${target}
- checkCommand: Chequea si la sintaxis es correcta y si ocurre un error también se puede definir con errorCodes. Cuando no está disponible el método getReliability devuelve 0:0 este método se usa para utilizar el transformador más eficiente en caso de que haya varios definidos que conviertan de la misma fuente al mismo destino.
- explicitTransformations establece el tipo MIME fuente y destino de forma explícita.
Creamos el fichero nef-tiff-jpeg-transform-context.xml:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <bean id="transformer.worker.NEFtoTIFF" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker"> <property name="checkCommand"> <bean class="org.alfresco.util.exec.RuntimeExec"> <property name="commandMap"> <map> <entry key=".*"> <value>${dcraw.exe} -i ${dcraw.home}/test.nef</value> </entry> </map> </property> <property name="errorCodes"> <value>1</value> </property> </bean> </property> <property name="transformCommand"> <bean class="org.alfresco.util.exec.RuntimeExec"> <property name="commandMap"> <map> <entry key="Linux.*"> <value>${dcraw.exe} -T '${source}' '${target}'</value> </entry> <entry key="Mac OS X"> <value>${dcraw.exe} -T '${source}' '${target}'</value> </entry> <entry key="Windows.*"> <value>${dcraw.exe} -T "${source}" "${target}"</value> </entry> </map> </property> <property name="waitForCompletion"> <value>true</value> </property> </bean> </property> <property name="explicitTransformations"> <list> <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails" > <property name="sourceMimetype"><value>image/x-nikon-nef</value></property> <property name="targetMimetype"><value>image/tiff</value></property> </bean> </list> </property> <property name="mimetypeService"> <ref bean="mimetypeService"/> </property> </bean> <bean id="transformer.NEFtoTIFF" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer"> <property name="worker"> <ref bean="transformer.worker.NEFtoTIFF"/> </property> </bean> <bean id="transformer.complex.Nef.Jpg" class="org.alfresco.repo.content.transform.ComplexContentTransformer" parent="baseContentTransformer" > <property name="transformers"> <list> <ref bean="transformer.NEFtoTIFF" /> <ref bean="transformer.ImageMagick" /> </list> </property> <property name="intermediateMimetypes"> <list> <value>image/tiff</value> </list> </property> </bean> </beans>
Ahora con dcraw.exe…
Esta utilidad de línea de comandos al igual que convert.exe de ImageMagick tiene la siguiente sintaxis:
C:Usersfernando.gonzalezworkspaceCommonMingW-release-orig-x32>dcraw.exe
Raw photo decoder «dcraw» v9.06
-gSet custom gamma curve (default = 2.222 4.5)
Podemos observar tres cosas:
- Podemos usar el modificador -i para chequear la utilidad, solo hay que usar una imagen y llamarla por ejemplo test.nef
- Debemos usar el modificador -T para pasar las imágenes a TIFF en lugar de PPM que es lo que hace por defecto
- Tenemos un problema, el resultado de la transformación es siempre el mismo fichero pero con la extensión cambiada, es decir, no podemos obligar a guardar el resultado en otro fichero (bueno, si, con el modificador -c que saca la salida por consola y capturandola con una redirección «>» pero esto no funciona bien)
Este script en formato BAT/CMD de Windows y llamado dcraw.cmd es el siguiente:
@ECHO OFF
Seguidamente vamos a crear las variables en el fichero de propiedades, en este caso utilizo el mismo alfresco-global.properties:
dcraw.home=C:/Users/fernando.gonzalez/workspace/Common/MingW-release-orig-x32
Y por último debemos declarar los tipos MIME (mimetypes) en el fichero mimetypes-extension-map.xml que está en /alfresco/extension/mimetype:
<alfresco-config area="mimetype-map"> <config evaluator="string-compare" condition="Mimetype Map"> <mimetypes> <mimetype mimetype="image/x-nikon-nef" display="Nikon Raw Image"> <extension>nef</extension> </mimetype> </mimetype> </mimetypes> </config> </alfresco-config>
Para depurar podemos activar las siguientes líneas en Log4J (log4j.properties o custom-log4j.propeties en el extension):
log4j.logger.org.alfresco.repo.content.transform.TransformerDebug=debug
Enlaces de interés: