Pregunta

Hay una 3ª parte de la api de android para leer las etiquetas exif de la imagen que de soporte a nivel de api a partir de 1.5.

¿Fue útil?

Solución

El la extracción de metadatos de la biblioteca por Drew Noakes funciona bien para la extracción de etiquetas EXIF en anteriores versiones de la plataforma Android, con una ligera modificación.La estoy usando en Android 1.6 para extraer las etiquetas de las imágenes JPEG.

NOTA:Las versiones más recientes de metadatos-extractor trabajar directamente en Android sin modificaciones.

Usted necesitará descargar y construir el código de la fuente, y el paquete con su aplicación.(Yo estoy usando la versión 2.3.1.) Hacer los siguientes cambios com.drew.imaging.jpeg.JpegMetadataReader:

  • Retire la siguiente sentencia import:

    import com.sun.image.codec.jpeg.JPEGDecodeParam;

  • Eliminar el siguiente método (que no necesita en Android):

    public static Metadata readMetadata(JPEGDecodeParam decodeParam) { ... }

Quitar el com.drew.metadata.SampleUsage clase, que hace referencia al método de borrado anteriormente.También eliminar todos los paquetes de test.

Eso es todo allí está a él.Aquí un ejemplo de uso de la JpegMetadataReader para extraer una fecha y hora de la etiqueta de una imagen JPEG almacenados en la tarjeta SD:

import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifDirectory;

// other imports and class definition removed for brevity

public static Date extractExifDateTime(String imagePath)
{
    Log.d("exif", "Attempting to extract EXIF date/time from image at " + imagePath);
    Date datetime = new Date(0); // or initialize to null, if you prefer
    try
    {
        Metadata metadata = JpegMetadataReader.readMetadata(new File(imagePath));
        Directory exifDirectory = metadata.getDirectory(ExifDirectory.class);

        // these are listed in order of preference
        int[] datetimeTags = new int[] { ExifDirectory.TAG_DATETIME_ORIGINAL,
                                         ExifDirectory.TAG_DATETIME,
                                         ExifDirectory.TAG_DATETIME_DIGITIZED };
        int datetimeTag = -1;
        for (int tag : datetimeTags)
        {
            if (exifDirectory.containsTag(tag))
            {
                datetimeTag = tag;
                break;
            }
        }

        if (datetimeTag != -1)
        {
            Log.d("exif", "Using tag " + exifDirectory.getTagName(datetimeTag) + " for timestamp");

            SimpleDateFormat exifDatetimeFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
            datetime = exifDatetimeFormat.parse(exifDirectory.getString(datetimeTag));
        }
        else
        {
            Log.d("exif", "No date/time tags were found");
        }
    }
    catch (Exception e)
    {
        Log.w("exif", "Unable to extract EXIF metadata from image at " + imagePath, e);
    }
    return datetime;
}

Otros consejos

Por si sirve de algo, ¿intentaste utilizar la clase nativa ExifInterface?

http://developer.android.com/reference/android/media/ExifInterface.html

Debería ser más rápido que usar una biblioteca de terceros;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top