В Java, как я могу извлечь информацию, связанную с камерой из изображения? - PullRequest
5 голосов
/ 22 августа 2011

Я хочу извлечь информацию, связанную с камерой, из jpg, используя Java.Я оглянулся, но не смог найти решение своей проблемы.Я экспортирую свои фотографии из Aperture на моем Mac (OS X 10.7) и хочу использовать данные из Aperture, которые доступны в информации о файле.

Есть идеи?

Я ищуРазмеры и ключевые слова извлекаются из фотографий, подобных этой: 80.167.88.49/masters/test.html.В настоящее время я получаю исключение при попытке использовать экстрактор метаданных.Я не знаю, добавляет ли Aperture информацию, которую невозможно обработать, но она вызывает исключение на всех фотографиях из Aperture.

Exception in thread "main" java.lang.NoClassDefFoundError: com/adobe/xmp/XMPException
    at com.drew.imaging.jpeg.JpegMetadataReader.extractMetadataFromJpegSegmentReader(Unknown Source)
    at com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(Unknown Source)
    at com.drew.imaging.ImageMetadataReader.readMetadata(Unknown Source)
    at com.drew.imaging.ImageMetadataReader.readMetadata(Unknown Source)
    at ImageScaler.main(ImageScaler.java:141)
Caused by: java.lang.ClassNotFoundException: com.adobe.xmp.XMPException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 5 more

Код:

public static void main (String[] args){

    File image = new File("/Users/peterla/Desktop/P8214462.jpg");

    Metadata metadata = null;
    try {
    metadata = ImageMetadataReader.readMetadata(image);
    } catch (ImageProcessingException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    Directory directory;

    // Keywords
    directory = metadata.getDirectory(IptcDirectory.class);
    String keywords[] = directory.getStringArray(IptcDirectory.TAG_KEYWORDS);

    // Dimensions
    directory = metadata.getDirectory(JpegDirectory.class);     
    String height = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT);
    String width = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_WIDTH);     
}

Ответы [ 3 ]

4 голосов
/ 22 августа 2011

Metadata Extractor имеет простой интерфейс для чтения нескольких типов метаданных из многих цифровых форматов изображений.Это включает в себя формат метаданных EXIF ​​, используемый в изображениях JPEG.Библиотека имеет хороший Javadoc стиль документация .

Основной точкой входа в библиотеку является ImageMetadataReader объект.

Начало работыСтраница содержит хорошее введение, включая хороший пример того, как получить значение для конкретного тега из метаданных формата EXIF.

Обновление: пример для извлечения ключевых слов и размеров

Directory directory;
// Keywords
directory = metadata.getDirectory(IptcDirectory.class);
String keywords[] = directory.getStringArray(IptcDirectory.TAG_KEYWORDS);

// Dimensions
directory = metadata.getDirectory(JpegDirectory.class);     
String height = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT);
String width = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_WIDTH);

Альтернативы

Альтернативы включают встроенную библиотеку Java ImageIO и Sanselan .

4 голосов
/ 22 августа 2011

Вам нужна библиотека для чтения метаданных EXIF ​​. В этом блоге .

есть пример того, как это сделать с ImageIO.

Существуют и другие библиотеки, которые вы также можете рассмотреть в зависимости от ваших потребностей. Например, MetadataExtractor или Sanselan .

1 голос
/ 22 августа 2011

jhead, инструмент манипуляции с заголовком JPEG EXIF, является еще одним вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...