NEVEGADORES ADECUADOS PARA EL CORRECTO VISIONADO DE ESTE SITIO

ImageMagick: Manual en español.

[Un paseo por ImageMagick]


III.- Metadatos





En el mundo de la imagen se denominan metadatos a toda aquella información sobre la imagen que es almacenada en el mismo archivo de esta. Como ejemplo de metadato podemos citar la fecha de toma de la imagen, el nombre del autor, el tipo de cámara etc.. En un archivo de imagen puede almacenarse una gran cantidad de información; seguidamente vamos a ver como visualizarla, modificarla, eliminarla etc...




III-1.-Visualización de los metadatos: El comando [identify]

IM nos permite visualizar los metadatos asociados a una imagen mediante el comando  [identify]
La utilización de la opción [-verbose] nos permitirá ver los datos en pantalla.

La sintaxis para este comando es:

identify -verbose input

Como podemos ver, la sintaxis básica de este comando tiene algo de peculiar: carece de output. La razón de esta ausencia es que no debe generarse ningún nuevo archivo. La función del comando [identify] es la de "husmear" en los metadatos de una imagen: la declarada como input.

Con la opción [-verbose] se obtienen una gran cantidad de datos de la imagen explorada, por lo que puede ser conveniente redirigir la salida del comando a un archivo de texto, lo que nos permitirá una mas cómoda consulta:

identify -verbose input.jpg > datos.txt

Con la anterior orden los metadatos de la imagen input.jpg son guardados en el archivo de texto datos.txt.





III-2.-La opción [-format] con el comando [identify]

Cuando hablamos del comando [mogrify] pudimos ver un determinado uso de la opción [-format]. Ahora vamos a ver la acción de esta opción cuando se usa con el comando [identify].

Usada con el comando [identify], la opción [-format] nos permitirá la visualización de determinadas características de una imagen, en especial aquellas que pueden incluirse en el archivo de la imagen mediante los denominados [Caracteres Especiales de Formato], descritos más adelante, al tratar la opción [-comment]. La sintaxis seria la siguiente:

identify -format "cadena" input

El argumento "cadena" está constituido por uno o varios de los [Caracteres Especiales de Formato] que se refieran a la información que deseemos obtener. Veamos unos ejemplos:

identify -format "%m:%f %wx%h" oca.jpg

Con la anterior orden visualizariamos la siguiente información:

JPEG:oca.jpg 125x56

El argumento cadena puede también adoptar la forma %[expresión], en la cual el argumento expresión puede ser cualquiera de estos:

   
%[base] Nombre de la imagen.     %[min]
%[channels] Canales     %[name] Nombre
%[colorspace] Espacio de color     %[page] Número de página
%[depth] Profundidad de color     %[scene] Número de escena
%[directory] Directorio     %[escenes] Número de escenas
%[extension] Extensión del archivo     %[size] Tamaño ( en Kb)
%[group] Grupo de usuarios     %[standard-deviation] Desviación estandar
%[height] Altura de la imagen     %[unique]
%[magick] Magick     %[width] Anchura
%[max]     %[xresolution] Resolución x
%[mean]     %[yresolution] Resolución y
   

Por ejemplo, con la orden:

identify -format "nombre:%[base];extensión:%[extension];\ tamaño: %[size]; directorio: %[directory];grupo: %[group]" oca.jpg

obtendríamos la siguiente salida:

nombre:oca;extensión:jpg;tamaño: 3.05859kb; directorio: ;grupo: 0x0




III-3.- Información de imágenes que se encuentren en memoria: [-identify]

Mediante esta opción podemos visionar en pantalla o guardar en un archivo la información referente a una imagen que se encuentre en la memoria.

La información que obtenemos con esta opción es la misma que podriamos obtener con -write info:   (Ver : [Formatos Especiales: info:])

Si precedemos esta opción con la opción [-verbose] se obtiene una gran cantidad de información sobre la imagen.

convert rose.png -identify -paint 3 -identify -resize 75% -identify output.png

Con la anterior línea de órdenes obtendríamos información, en primer lugar, (primera opción [-identify]) sobre el input rosa.png, luego, mediante la segunda opción [-identify], sobre la imagen trasformada por la opción [-paint] y , finalmente, sobre la imagen redimensionada con [-resize] ( tercera opción [-identify].

Si deseáramos que la información generada se guardara en un archivo en vez de ser visionada en pantalla, bastaria con redirigir la salida de la opción: -identify>nombre_archivo. De haber hecho esto en la anterior línea de órdenes hubiéramos obtenido tres archivos, conteniendo cada uno de ellos la información referente a la correspondiente imagen.





III-4.-Eliminar metadatos: [-strip]

Los metadatos de una imagen se conservan através de las sucesivas transformaciones a la que sea sometida, siempre que las nuevas imágenes generadas sean capaces de contenerlos.

Para eliminar del archivo de metadatos de la nueva imagen cualquier perfil o comentario que contenga usaremos [-strip] en la linea de comandos mediante la que realizamos la transformación.

convert -strip input.jpg output.png

convert input.jpg -strip -resize 50% output.png



III-5.-Añadir campos de comentario: [-comment]

Podemos modificar algunos de los atributos de los metadatos. Vamos a referirnos al modo de introducir un campo de comentarios en los metadatos de una imagen.

Con la opción [ -comment ] podemos introducir un comentario en los metadatos. Dicha opción puede utilizarse durante el proceso de transformación de una imagen, mediante [convert] , o sobre una imagen en particular mediante el comando [mogrify]

En el primer caso el comentario se introducirá en el output y en el segundo caso en el input ( Recordemos que no hay output con [mogrify]):

convert -comment "comentario que deseamos introducir" input output

mogrify -comment "comentario que deseamos introducir" input.jpg

Pueden utilizarse toda una serie de "caracteres de formato" para enriquecer el comentario con información util. Estos caracteres de formato son:


Caracteres especiales de formato
  
%b Tamaño del archivo    %p Número de página    \r Retorno de carro
%c Comentario    %q Profundidad de color ( en bits)    %A Canal Alfa de la imagen.
%d Directorio    %r Clase de imagen y espacio de color    %C Tipo de compresión.
%e Extension del archivo    %s Número de escena    %H Altura de la página.
%f Nombre del archivo    %t Inicio del archivo    %W Anchura de la página.
%g Geometria de página.    %u Unique temporary filename    %X x offset de la página.
%h Altura de la imagen    %w Anchura de la imagen    %Y y offset de la página.
%i Nombre del archivo input    %x Resolución x    %Q Calidad de la compresión..
%k  Nombre de color único    %y Resolutión y    %T Tiempo de retardo de la imagen.
%l Etiqueta    %z Profundidad       
%m Magick    %@ Bounding box       
%n Número de escenas    %# Firma       
%o Nombre del archivo output    \n Nueva linea       
  

Por ejemplo:

mogrify -comment " Imagen de vacaciones  %s" input.jpg

mogrify -comment "El tamaño de esta imagen es de %b bytes" input.jpg

La utilidad final de los anteriores "caracteres de formato" es la de intoducir información sobre la imagen, autor etc.... en el archivo mismo de la imagen.





III-6.-Añadir campos de etiqueta: [-label]

Del mismo modo que se utiliza [-comment] ,en formatos que soporten etiquetas (PNG,TIFF, MIFF), puede utilizarse la opción [-label] para etiquetar imágenes durante su proceso de creación o edición:

mogrify -label "Texto de la etiqueta" input.jpg

En el archivo de la imagen se crea una etiqueta, label, con el contenido del argumento de la opción.

Pueden incluirse atributos como el nombre de archivo, tipo, dimensiones, etc .. mediante la utilización de los [Caracteres Especiales de Formato] que se han descrito en [-comment]. Por ejemplo:

convert -label " Foto tomada por Juán. Datos: %x %y " oca.jpg oca.png

Ahora, con el comando [identify] podemos controlar si se ha creado la etiqueta. Como se ha visto anteriormente, disponemos de dos formas de hacerlo: mediante la opción [-verbose] o mediante la opción [-format]:

identify -verbose oca.png

 ..........................
..........................
Jpeg:sampling-factor: 1x1,1x1,1x1
Label: Foto tomada por Juán. Datos: 72 PixelsPerInch 72 PixelsPerInch
Signature: 0c7e48da878c107b3ad5838307eaedb80bf6994d0e6cc8bea4685fa60760d382
Profile-exif: 650 bytes
Profile-icc: 560 bytes
Adobe RGB (1998)
........................
........................

identify -format "%l" oca.png

Foto tomada por Juán. Datos: 72 PixelsPerInch 72 PixelsPerInch

Tanto con [-comment] como con [-label], si el primer caracter del comentario es el símbolo @, el resto del argumento es tomado del archivo del cual debe obtenerse el comentario o la etiqueta. Por ejemplo, creamos un archivo de texto, firma.txt, con un determinado contenido.

La orden:

mogrify -comment @firma.txt  input.png

añadira el contenido de firma.txt como comentario ( o etiqueta, si se utiliza con [-label]).

Se pueden eliminar todas las etiquetas de una imagen dando como argumento de la opción una cadena vacia.

Mas adelante, en Rotulando imágenes con [-label] , veremos otra aplicación de esta opción: la de etiquetar "de forma visible" las imágenes.





III-7.-La opción : [-set]

Con esta opción podemos asignar un atributo a una imagen , o a una serie de imágenes, después de haber sido creda o leida. La sintaxis para esta opción es:

convert -set atributo valor

Como atributos de interés para usar con esta opción podemos citar:


Observemos que los atributos de [-set] se correponden con opciones: Cuando se utilizen como atributos se elimina el caracter -

Podemos imaginarnos que el conjunto -set atributo se comporta como la opción -atributo.

Veamos como utilizar esta opción:

convert -set comment "Una Rosa es una Rosa" roses.png roses_c.png

Hemos añadido un comentario. Para visualizarlo podemos ejecutar el comando [identify] con la opción [-format]:

identify -format %c roses_c.png
Una Rosa es una Rosa




Modificando el modo de almacenar pixels: [-colors] [-colorspace] [-depth] [-type]


No todos los datos que se muestran con [identify] son metadatos. Por ejemplo,el número de colores, la profundidad de color, el espacio de color etc no lo son. Es posible cambiar los atributos de esos valores. Así, si se desea cambiar el número de colores de una imagen, puede hacerse utilizando la opción [-colors] , para modificar el espacio de color tenemos la opción [-colorspace] y para profundidad de color, la opción [-depth].





III-8.-Número de colores: [-colors]

La sintaxis para esta opción es:

convert -colors argumento input output

En esta opción el argumento será el número de colores.

El número de colores que fijemos con esta opción puede ser menor que el de la imagen original, pero nunca mayor. De hecho, esta es una opción de reducción del número de colores





III-9.- Espacio de color: [-colorspace]

La sintaxis para esta opción es:

convert -colorspace argumento input output

En esta opción el argumento será el nombre del espacio de color.

Podemos obtener un listado de los nombres de los espacio de color disponibles en nuestra versión de IM con la orden:

convert -list colorspace



III-10.- Profundidad de color de color: [-depth]

La sintaxis para esta opción es:

convert -depth argumento input output

En esta opción el argumento será la profundidad de color.

Esta opción se utilizará para establecer la profundidad de color en imágenes raw en las que la profundidad de color es desconocida o para cambiar la profundidad de color de cualquier imagen, después de que haya sido leida.

Por ejemplo, para establecer una profundidad de color de 8 bits:

convert -depth 8 input.jpg  output.jpg





III-11.- Representación de pixels: [-type]

También podemos utilizar IM para forzar la utilización de una determinada representación de los pixels en la imagen, mediante la opción [-type].
Las sintaxis para esta opción son:

convert -type argumento input output

Las argumentos posibles de [-type] son:


Bilevel     Una imagen en blanco y negro en que los pixels estan  en "on" u "off"
Grayscale     Pixels are able to have only one sample, which is why they’re not color
Palette     Los colores se hallan definidos en un archivo (paleta de colores) y cada pixel se refiere a una entrada de la tabla de colores definida
PaletteMatte     Una paleta de colores que, además contiene un canal alfa ( transparencia)
TrueColor    Se refiere a una completa imagen RGB
TrueColorMatte     Una imagen RGB, pero conteniendo además un canal alfa. Conocida también como imagen RGBA
ColorSeparation     Los colores se hallan almacenados separadamente en el bitmap. Los valores del rojo se hallan almacenados juntos, asi como los del verde y el azul
ColorSeparationMatte     Como en  ColorSeparation pero con un canal alfa.
Optimize      Optimiza el resultado de los formatos que se estén usando y los valores de pixel  usados en la imagen.

Un ejemplo de orden con [-type] seria:

convert -type Bilevel input.jpg output.png

Utilizar el argumento optimize para asegurarse que la imagen ha sido escrita en un archivo de tamaño lo mas pequeño posible.

Mediante la opción [-list] con el argumento type obtendremos un listado de los posibles argumentos de esta opción disponibles en nuestra versión de IM:

convert -list type



III-12.- Corrección gamma:[-gamma]

La corrección gamma nos servirá para calibrar imágenes de modo que , por ejemplo, se "vean" impresas tal como las veíamos en pantalla o que se "vean igual" en dos monitores distintos. Un ejemplo de la aplicación de la opción [-gamma]  seria:

convert -gamma argumento input.png output.jpg

En esta opción el argumento será el valor de la corrección gamma. Los valores "corrientes" de gamma varian de 0,8 a 2,3. Valores superiores a 1 oscurecen la imagen y valores inferiores a 1 la aclaran.

Los ajustes gamma pueden realizarse también através de la opción [-level]

Si necesitáramos especificar un valor de corrección gamma para cada canal de color, se introducirian los tres valores , en orden RGB y separados por una coma:

convert -gamma 1.3,1.5,1.1 input.jpg output.jpg

Utilizar la forma [+gamma] para ajustar el nivel gamma sin ajustar los pixels de la imagen. Esta opción será util en aquellas imágenes de las que se conozca el valor gamma pero que no está como atributo de la imagen (caso de las imágenes en formato PNG).





III-13.- Modificar el perfil de la imagen: [-profile] [+profile]

IM nos permite, mediante la opción [-profile], especificar un determinado perfil.

convert -profile argumento input output

En esta opción el argumento es el nombre del perfil.

mogrify -profile nombre_perfil input

Si queremos eliminar un determinado perfil de una imagen, usaremos la opción [+profile]

mogrify +profile nombre_perfil input

Para eliminar todos los perfiles utilizaremos la opción [-strip]

(Recordemos de nuevo que en la mayoria de las opciones pueden utilizarse indistintamente con los comandos [convert] o [mogrify], dependiendo si se desea o no conservar la imagen original sin modificar)

Si deseáramos extraer un perfil de una imagen (input) debe actuarse como si realizara un cambio de formato de imagen, salvando el output con un formato de imagen tal como APP1, ICM o IPCT. Así, para extraer los datos EXIF (almacenados, en imágenes JPEG, en el perfil APP1) escribiríamos a siguiente línea de órdenes:

convert input.jpg output.exif

El resultado de la anterior orden dependerá de si la imagen original tenia o no incluido un perfil.

La opción [-profile] es una de las denominadas opciones-operativas. Ello significa que en una línea de ordenes se realizará una conversión de perfil cada vez que se encuentre una opción [-profile]:

convert input.jpg -profile "CMYK.icc" -profile "RGB.icc" output.tiff

El perfil del input será cambiado a CMYK por a primera opción [-profile] y este perfil será de nuevo cambiado a RGB por la segunda opción, por lo que el output tendrá este último perfil (RGB).





III-14.- Manejo de imágenes que no especifican sus dimensiones: [-size]

Mediante esta opción podemos ajustar el tamaño de la imagen.

Varios de los formatos de imagen soportados por IM no llevan el tamaño codificado en el propio archivo de la imagen. De hecho, son formatos que no almacenan metadatos, salvo el propio bitmap de la imagen.
Con IM puede especificarse el tamaño que se desea que tenga la imagen final a la hora de convertir una imagen de este tipo. Se hará mediante la opción [-size] :

convert -size WxH input.raw output.jpg

Donde:

Mas adelante, en las secciones: [Dibujar con ImageMagick] y [Creación de lienzos], veremos otra aplicación de esta opción.





III-15.- Resolución de la imagen: [-density] [-units]

Mediante la opción [-density] podemos establecer la resolución de una imagen.

La utilizaremos para modificar el dato de resolución en formatos de imagen que lo incluyan en sus metadatos.

Cuando se trató de la opción [-resample] se vió la utilidad de [-density] para fijar una resolución en formatos de imagen que no la codifican en sus metadatos.

Cuando usemos [-density] deberemos especificar también las unidades utilizadas mediante la opcion [-units]

La sintaxis para esta opción responderia al siguiente modelo:

convert input -density WxH -units unidad output

Donde:

W= resolución horizontal
H= resolución vertical

Existen tres opciones para especificar la unidad:

Undefined      No definida
PixelsPerInch      Pixels por pulgada
PixelsPerCentimeter      Pixels por centímetro

Un ejemplo de uso de [-density] para establecer una resolución de 300 pixels por pulgada (tanto horizontales como verticales) seria:

mogrify -density 300x300 -units PixelsPerInch input.jpg





III-16.-Control del Canal Alfa (transparencia): [-alpha]

El canal alfa ( transparencia) de una imagen es completamente opcional y, a menudo, requiere un manejo especial, distinto del de los otros canales de color "normales".

Por otra parte, debe considerarse que la existencia de un canal alfa puede afectar al modo de actuar de otras opciones que operen sobre los canales de color, ya que estas suelen ignorar los colores completamente transparentes.

La opción que nos permite el manejo de la trasparencia de una imagen es la opción [-alpha].Su sintaxis es:

-alpha metodo

Mediante la orden: convert -list alpha puede obrenerse el listado de los métodos disponibles en nuestra versión de IM.

Los métodos (argumentos) que vamos a considerar son:


Veamos cada uno de ellos



[Off]

Desactiva cualquier canal alfa ( cualquier efecto de transparencia) que tenga la imagen.

La opción [-alpha off] es equivalente a opción [+matte] (no tratada en este manual)

Partimos de la imagen RB.png que originamos al tratar de la opción [-transparent]

En dicha imagen creamos un canal alfa, correspondiente al color verde ('#00ff00') de la imagen original.


RB.gif

Veamos como actuaria el método [Off]:

convert RB.png -alpha Off off.png

Como podemos ver, se ha desactivado el canal alfa existente, haciéndose de nuevo visible el color verde.


off.png


Debemos comentar que con este método el canal alfa se DESACTIVA, NO SE ELIMINA. Sigue presente en los datos de la imagen.

[On]

Este método hace todo lo contrario del anterior: Activa los canales alfa presentes en la imagen.... que se encuentren desactivados, naturalmente.

Debemos notar que NO CREA CANALES ALFA. SOLO ACTIVA AQUELLOS EXISTENTES QUE SE ENCUENTREN DESACTIVADOS.

Así, si a la imagen anterior (off.png) le "aplicáramos" el método [On], convertiríamos de nuevo en transparente el color verde.



[Set]

Este método nos "asegura" que el canal alfa está activo, pero si estuviera en off , en el momento de aplicar el método, lo activaria pero nos lo presentaria completamente opaco.

Si la imagen tiene el canal alfa activo, esta opción no la afecta.

Este método es la via para asegurarnos que una imagen posee un canal alfa activo después de que sea leida en memoria.

La opción [-alpha set] es equivalente a opción [-matte] ( no tratada en este manual)

convert RB.gif -alpha off -alpha set alpha-set.gif

Como podemos ver, al estar el canal alfa desactivado en el momento de aplicar el método [Set],nos lo muestra completamente opaco.


alpha-set.gif


[Opaque]

Este método pasa a On el canal alfa pero lo fuerza a presentarse completamente opaco.

convert RB.gif -alpha opaque alpha-opaque.gif

Como podemos ver, obtenemos un canal alfa absolutamente opaco. Obtendriamos el mismo resultado con la orden ( Véase la opción [-opaque]:

convert RB.gif -alpha Off -opaque '#00ff00' alpha-opaque.gif


alpha-opaque.gif


[Transparent]

Similarmente a [Opaque], este método nos asegura que el canal alfa está activo, pero lo fuerza a presentarse como completamente transparente.



[Extract]

Este método simplemente copia los valores del canal alfa de todos los canales de colore y pasa a Off la transparencia de la imagen, generando una máscara de imagen en escala de grises.Las zonas blancas se corresponderán con las completamente opacas y las negras con las completamente transparentes.

Partiendo de la imagen luna.png


luna.png

convert luna.png -alpha extract alpha-extract.png


alpha-extract.png

El canal alfa ha sido desactivado, pero no eliminado.Reactivándolo btendremos una máscara de la imagen:

convert alpha-extract.png -alpha On alpha-extract-on.png


alpha-extract-on.png


[Copy]

Este es el método contrario al anterior:Pasa a On el canal alfa y convierte una imagen en escala de grises en una máscara de imagen. No se modifican los canales de color.

convert alpha-extract.png -alpha copy alpha-copy.png


alpha-extract.png

alpha-copy.png


[Shape]

Este método actua como el anterior pero con el añadido que coloreará la imagen con el color definido en [-background].

convert alpha-extract.png -background Yellow \
-alpha shape alpha-shape.png


alpha-extract.png

alpha-shape.png




III-17.-Encriptado/Desencriptado de imágenes: Las opciones [-encipher] y [-decipher]

Las opciones [-encipher] y [-decipher] fueron incorporadas en la versión 6.3.8-6 y se requeria incluir --enable-cipher en la configuración para que funcionaran. A partir de la versión 6.4.6 ya no es necesario realizar este paso.

La opción [-encipher] oculta la imagen que deseemos encriptar ( input) en el interior de otra imagen, de tal forma que el resultado (output) no sea reconocible como imagen.

convert input -encipher archivo.txt output.png

El argumento de esta opción, archivo.txt, es un archivo de texto que contenga el password.

Este método de encriptación funciona bién guardando el output en formatos de imagen sin-pérdida, tales como PNG, MIFF y TIFF. Usado con formatos con pérdida, comp JPG o GIFF, podria corromperse el archivo, siendo imposible su posterior desencriptación.

Se asume que la imagen encriptada se guarda utilizando un formato de 8 bits. Se recomienda forzar la utilización de esta profundidad mediante la opción [-depth], antes de salvar el output.

convert input -encipher archivo.txt -depth 8 output.png


Vamos a proceder a la encriptación de la imagen grun.jpg, utilizando el password contenido en el archivo de texto cifra.txt

convert grun.jpg -encipher cifra.txt -depth 8 encipher.png


Para la restauración (desencriptación) de la imagen original disponemos de la opción [-decipher]

convert imagen_cifrada.png -decipher imagen_original.png

Debe tenerse presente que los metadatos permanecen inalterados y "visibles" mediante el comando [-identify]. Esto nos permite usarlos para la encriptación de la imagen y su posterior desencriptación.

Supongamos que deseamos cifrar la imagen grun.jpg usando como clave el contenido de uno de sus metadatos ( p.e., el texto del campo comment). La línea de órdenes seria:

identify -format '%c' grun.jpg | convert grun.jpg -encipher - -depth 8 grun-cifrado.png

En primer lugar "extraemos" el contenido del campo comment (identify -format '%c') y dirigimos la salida a la siguiente línea de órdenes mediante la "pipe" |. En la línea de órdenes del comando convert vemos que el argumento de -encipher es - : esto significa que como argumento debe tomar la salida del anterior comando (el contenido del campo comment).

Para la desencriptación por este método:

identify -format '%c' grun-cifrado.png | convert grun-cifrado.png -encipher - grun-restaurado.png

Desde la versión de IM 6.4.8 , como clave de encriptación puede utilizarse cualquier archivo binario, esto es, puede utilizarse otra imagen.

Supongamos que deseamos encriptar la imagen grun.jpg usando como clave la imagen mar.png:

convert grun.jpg -encipher mar.png -depth 8 grun-cifrado.png

Para descifrar:

convert grun-cifrado.png -decipher mar.png grun-restaurado.png





[ Indice ] [ Inicio Sección] [ Sección Anterior ] [ Sección Siguiente ]

Licencia: "ImageMagick: Manual en español". By Antoni Serra Devecchi is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 España License.

NEVEGADORES ADECUADOS PARA EL CORRECTO VISIONADO DE ESTE SITIO