EXIF (Exchangeable Image File Format) — это стандарт для указания форматов изображения и звука, которые в основном используются цифровыми камерами и сканерами. Данные EXIF включают информацию о тегах и метаданных о захваченном файле изображения. Метаданные могут содержать такую информацию, как производитель камеры, модель, выдержка, дата и время, диафрагма, время экспозиции, разрешение X, разрешение Y. и т.п.
Если вы хотите программно управлять, извлекать, обновлять или удалять данные EXIF ваших изображений, эта статья для вас. В этой статье будут рассмотрены следующие способы работы с данными EXIF в Java:
- Извлечение данных EXIF - Средство просмотра данных EXIF
- Извлечь все теги EXIF из изображений
- Обновить свойства EXIF
- Удалить метаданные EXIF
Библиотека управления метаданными Java
GroupDocs.Metadata for Java — это простой в использовании Java API для управления метаданными. Он может не только извлекать метаданные из изображений, таких как JPG, PNG или WebP, но также может добавлять, редактировать, обновлять и удалять метаданные из изображений и других документов с различными параметрами.
Я использую этот API в этой статье, поэтому обязательно скачайте или интегрируйте его в свои приложения на основе Maven, просто добавив следующие конфигурации в файл pom.xml.
Репозиторий и зависимость
<repository>
<id>GroupDocsJavaAPI</id>
<name>GroupDocs Java API</name>
<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-metadata</artifactId>
<version>20.5</version>
<classifier>javadoc</classifier>
</dependency>
Извлечение данных EXIF из изображений в Java — средство просмотра метаданных
Вы можете прочитать свойства данных EXIF, выполнив простые шаги. Начнем с извлечения данных EXIF из этого изображения Эйфелевой башни. Я выбрал файл JPG в качестве примера изображения, вы можете использовать любой из ваших файлов, будь то PNG, WebP, BMP, GIF или TIFF.
- Загрузите исходный файл изображения, содержащий данные EXIF, с помощью конструктора класса Metadata.
- Получите его корневой пакет, вызвав метод getRootPackage().
- Из корневого пакета получите его EXIF-пакет, вызвав метод getExifPackage().
- Если у вас есть пакет EXIF, вы можете получить свойства EXIF изображения, такие как Изготовление, Модель, Ширина, Длина, Дата-время и т. д., как показано на рисунке. в приведенном ниже примере кода Java.
// Extract EXIF Data Package Information from image in Java
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
IExif root = (IExif) metadata.getRootPackage();
if (root.getExifPackage() != null) {
// Extract EXIF Package
ExifPackage exifPackage = root.getExifPackage();
System.out.println("Make : " + exifPackage.getMake());
System.out.println("Model : " + exifPackage.getModel());
System.out.println("Width : " + exifPackage.getImageWidth());
System.out.println("Length : " + exifPackage.getImageLength());
System.out.println("DateTime : " + exifPackage.getDateTime());
}
}
Вот информация EXIF, которую вы получите в результате выполнения приведенного выше кода.
Make : NIKON CORPORATION
Model : NIKON D3000
Width : 640
Length : 424
DateTime : 2014:08:09 10:35:13
Для получения дополнительной информации о пакетах IFD (каталог файлов изображений) и GPS (система глобального позиционирования) вам просто нужно вызвать соответствующие методы пакета EXIF, например getExifIfdPackage(). или getGpsPackage(). Из этих пакетов вы можете извлечь больше информации, например;
- Устройство захвата изображения серийный номер
- Камера Имя владельца
- Комментарии пользователей
- Высота
- Широта
- Долгота
- так далее.
Вот код, который вы можете добавить в указанный выше метод для отображения данных EXIF вместе с информацией IFD и GPS.
// EXIF IFD Package
ExifIfdPackage exifIfdPackage = exifPackage.getExifIfdPackage();
System.out.println("BodySerialNumber : " + exifIfdPackage.getBodySerialNumber());
System.out.println("CameraOwnerName : " + exifIfdPackage.getCameraOwnerName());
System.out.println("UserComment : " + exifIfdPackage.getUserComment());
// EXIF GPS Information Package
ExifGpsPackage exifGpsPackage = exifPackage.getGpsPackage();
System.out.println("getAltitude : " + exifGpsPackage.getAltitude());
System.out.println("Latitude Ref : " + exifGpsPackage.getLatitudeRef());
System.out.println("LongitudeRef : " + exifGpsPackage.getLongitudeRef());
Чтение всех тегов EXIF изображений с использованием Java
Если вы хотите показать или извлечь все свойства EXIF любого изображения или файла, вы можете сделать это, выполнив шаги, аналогичные приведенным выше примерам:
- Просто загрузите файл с помощью конструктора Metadata.
- Получите корневой пакет EXIF, вызвав метод getRootPackage().
- Получите пакет EXIF, вызвав метод getExifPackage().
- Переберите пакет EXIF, чтобы получить нужные пары имя-значение.
- Точно так же получите пакеты IFD и GPS и отобразите их ключи и значения.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
IExif root = (IExif) metadata.getRootPackage();
if (root.getExifPackage() != null) {
String pattern = "%s = %s";
// Reading all EXIF tags.
for (TiffTag tag : root.getExifPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
}
// Extract all EXIF IFD tags.
for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
}
// Extract all EXIF GPS tags
for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
}
}
}
Обновить свойства EXIF в Java
Вы даже можете легко изменить существующие данные EXIF любого изображения или любого документа. Шаги просты:
Обновить пакет EXIF
- Получите пакет EXIF, вызвав метод getExifPackage().
- Используйте такие методы установки, как;
- setCopyright() - установить обновленную информацию об авторских правах.
- setImageDescription() - установить описание изображения.
- Точно так же вы можете установить значения для исполнителя, производителя, модели, программного обеспечения, ширины и высоты изображения, даты, времени и т. д.
Обновление пакета EXIF IFD
Точно так же, как при обновлении пакета EXIF, вы можете обновлять свойства пакетов EXIF IFD и GPS. Посетите класс ExifIfdPackage или ExifGpsPackage, чтобы узнать, сколько вы можете настроить для ценных изображений и документов.
// Update/Set new values in EXIF Data (EXIF Package and EXIF IFD Package).
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
IExif root = (IExif) metadata.getRootPackage();
// Set the EXIF package if it's missing
if (root.getExifPackage() == null) {
root.setExifPackage(new ExifPackage());
}
ExifPackage exifPackage = root.getExifPackage();
// Setting the desired values in EXIF Package and EXIF IFD Package.
exifPackage.setCopyright("Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.");
exifPackage.setImageDescription("Eiffel Tower for EXIF");
exifPackage.setSoftware("GroupDocs.Metadata");
exifPackage.getExifIfdPackage().setBodySerialNumber("GD-2020");
exifPackage.getExifIfdPackage().setCameraOwnerName("GroupDocs");
exifPackage.getExifIfdPackage().setUserComment("Nice image captured in 2014");
metadata.save("eiffel-tower-updated.jpg");
}
Удалить метаданные EXIF из изображений в Java
Это очень просто, если вы хотите удалить пакет EXIF из любого файла, просто установите для его пакета EXIF значение null, вызвав setExifPackage(null) корневого пакета.
// Removing the EXIF data from an image.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
IExif root = (IExif) metadata.getRootPackage();
root.setExifPackage(null);
metadata.save("eiffel-tower-no-exif.jpg");
}
Поддерживаемые изображения и другие форматы
Вот поддерживаемые в настоящее время форматы файлов GroupDocs.Metadata. Вы всегда можете посетить документацию для получения обновленной информации.
Тип документа | Форматы файлов |
---|---|
Изображения | BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF |
Аудио и видео | MP3, WAV, AVI, MOV/QT, FLV, ASF, DICOM |
Подробнее о GroupDocs.Metadata
- Документация
- Примеры исходного кода. Ява | .NET
- GroupDocs.Metadata – Решение для управления метаданными
Давайте поговорим подробнее @ Бесплатный форум поддержки.