2011-02-14 14 views
6

A través de investigaciones previas, descubrí que no es demasiado difícil establecer las propiedades de MetaData en una imagen. Por ejemplo, puedo leer una imagen JPEG en un objeto Bitmap y cambiar su fecha "Original Taken" a través del método SetPropertyItem de la imagen (ya he investigado el formato y la enumeración para hacer esto).Establecer metadatos JPEG: problemas de implementación

Sin embargo, aunque la parte real de Metadatos parece fácil, estoy frente a un par de irritantes cuestiones de aplicación:

1) Cuando llamo a Save() en el mapa de bits, no parece que el original de la imagen la configuración de codificación se utiliza. Como resultado, el nivel de compresión cambia (presumiblemente a algún valor predeterminado); Puedo ver que el tamaño del archivo se reduce considerablemente después de mi llamada a Save(). Sé que puede personalizar la configuración de codificación para una imagen dentro de la llamada a Guardar(), pero, sinceramente, solo quiero cambiar los metadatos de la imagen; ¿No hay alguna manera sencilla de guardar la imagen usando su configuración de codificación original? Incluso si pudiera hacer referencia directamente a la configuración de codificación existente de la imagen en la llamada a Guardar(), eso ayudaría.

2) Al parecer, el archivo original está bloqueado cuando lo lee en un objeto Bitmap. Como resultado, no puedo guardar la imagen con su nombre de archivo original sin muchos problemas: en la actualidad, estoy dibujando la imagen que leí del archivo en un mapa de bits fuera de la pantalla, desechando la imagen original y luego guardando la imagen. mapa de bits fuera de pantalla. Nuevamente, esto parece una gran cantidad de trabajo extra cuando todo lo que quiero hacer es actualizar los metadatos en un archivo de imagen.

Cualquier sugerencia que pueda ofrecer sería muy apreciada ... la cantidad de trabajo que tengo que hacer solo para actualizar los metadatos de un archivo JPEG (la mayoría de los cuales no tiene nada que ver con el cambio real de metadatos) me lleva para preguntarme si me faltan formas más fáciles o mejores de hacer esto.

+1

JPEG es un formato con pérdida ** **, y cada vez que se guarda la información si no se pierden incluso si se utiliza la misma configuración. La única forma de evitar esto es usar una biblioteca que no descomprima la imagen. –

Respuesta

1

Lo que quiere hacer es editar los datos EXIF. Lo que está haciendo ahora es recomprimir la imagen, y esto causará pérdida de calidad, como habrá notado.

ver este ejemplo de código para EXIF ​​de edición: http://www.dreamincode.net/code/snippet3144.htm

+0

Utilicé ese ejemplo de código para actualizar las etiquetas exif 36867, 306 y 36868 en una imagen, y verifiqué que las etiquetas realmente estaban configuradas. Aun así, cuando coloco el mouse sobre la imagen guardada en el Explorador de Windows, la información sobre herramientas aún dice que fue tomada en la fecha anterior, en lugar de la nueva que he establecido en esas tres etiquetas. ¿Hay algo más que me pierdo? Además, el tamaño del archivo aún es diferente del original; ¿No hay forma de simplemente alcanzar dentro de un JPEG y cambiar algunos metadatos sin volver a guardar todo? –

+0

¿Cuán diferente es el tamaño del archivo? Sí, debería funcionar, y simplemente edite los datos EXIF. Hmmm. Además, Windows Explorer puede haber guardado en caché la información en thumbs.db, pero no estoy seguro. – Brad

Cuestiones relacionadas