Получение значение ISO

Доброе время суток!
Я собираюсь приобрести один из ваших продуктов, а именно imaging for java. На данный момент использую Free Trials. Помогите мне, столкнулся с проблемой получения ISO характеристики фотографии. Использую следующий код:

Выдает 0, хотя TiffDataType с id=34855 присутствует и содержит значение 800, что соответствует ISO фотографии.
Помогите разобраться с этой проблемой, спасибо!

@noxius

Доброе время суток!

Проблема с получением значения ISO может быть связана с неправильным извлечением метаданных из TIFF-файла. Убедитесь, что вы используете корректные методы для доступа к метаданным. Вот пример кода, который может помочь вам получить значение ISO:

import com.aspose.imaging.Image;
import com.aspose.imaging.exif;

public class GetISOValue {
    public static void main(String[] args) {
        // Загрузите изображение
        Image image = Image.load("path/to/your/image.tiff");

        // Получите метаданные
        ExifData exifData = image.getExifData();
        if (exifData != null) {
            // Получите значение ISO
            TiffDataType isoValue = exifData.getTagValue(ExifProperties.PhotographicSensitivity);
            System.out.println("ISO значение: " + isoValue.getValue());
        } else {
            System.out.println("Метаданные EXIF не найдены.");
        }
    }
}

Убедитесь, что вы правильно указываете путь к вашему TIFF-файлу. Если значение ISO по-прежнему равно 0, возможно, в самом файле отсутствует эта информация или она неправильно записана.

Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь спрашивать!

Прошу прощения, я не указал код, который я использую.
JpegImage image = (JpegImage) Image.load(“test_3.jpg”);
JpegExifData jpegExifData = image.getExifData();

//возвращает 0
jpegExifData.getPhotographicSensitivity()

Но если
TiffDataType[] tiffDataTypes = jpegExifData.getExifTags();
то там есть поле с id=34855 которое содержит значение ISO

Добрый день, @noxius ,
Мы рассмотрим ваш запрос уже завтра и сразу поделимся результатами проверки. Для более высокой точности результатов, вы можете поделиться исходным файлом здесь или в приватном обсуждении на форуме.

Как можно загрузить фотографию без изменений? Я использую кнопку “загрузить”, но изображение сжимается. В любом случае фотография:
test_3.jpg (269,9 КБ)

Я не могу найти пакет com.aspose.imaging.metadata.exif и как следствие указанные классы
использую aspose-imaging-25.10.jar

@noxius , попробуйте загрузить файл внутри архива.

Попытался загрузить через архив 7z, при загрузке сообщили, что размер слишком большой (максимально разрешено 200 мегабайт), но я загружаю файл размером 27 метров, почему не проходит?

@noxius
Может попробуете загрузить его в GoogleDrive и дать нам ссылку на него?

Просим прощение за некорректность кода. Правильный код таков

import com.aspose.imaging.exif.ExifProperties;
import  com.aspose.imaging.fileformats.tiff.TiffDataType;

TiffDataType isoValue = exifData.getTagValue(ExifProperties.PhotographicSensitivity);
System.out.println("ISO значение: " + isoValue.getValue());

Класс ExifData не имеет метода getTagValue :frowning: Скорее всего я что-то делаю не правильно, поправьте меня пожалуйста.

Дайте мне, пожалуйста, немного времени, я проверю ваш файл и дам ответ.

Корректный код для получения данных.

// Загрузите изображение
try (Image image = Image.load("test_3.jpg"))
{
	// Получите метаданные
	ExifData exifData = image.getExifData();
	if (exifData != null) {
		// Получите значение ISO (это значение соответсвует тегу 0x8833 - ISOSpeed)
		long isoValue = exifData.getISOSpeed();
		
		// Чтобы получить доступ ко всем тегами, получаем их список
		TiffDataType[] properties = exifData.getProperties();

		// Ищем нужный (тег 0x8827 	called ISOSpeedRatings by EXIF 2.2, then PhotographicSensitivity by the EXIF 2.3 spec.)
		Optional<TiffDataType> tag = Arrays.stream(properties)
											 .filter(it -> it.getTagId() == ExifProperties.PhotographicSensitivity)
											 .findFirst();

		System.out.println("ISOSpeed значение: " + isoValue);
		if (tag.isPresent())
		{
			int[] values = (int[]) tag.get().getValue();
			System.out.println("PhotographicSensitivity значение: " + Arrays.toString(values));
		}
	} else {
		System.out.println("Метаданные EXIF не найдены.");
	}
}

Спасибо.
Да, я так и делаю. через получение массива я имею возможность добраться до необходимых мне данных.
Правильно ли я понимаю, что полагаться на именованные методы ( getFNumaber, getPhotographicSensitivity, getExposure… и так далее) лучше не стоит? И более надежно было бы получать массив TiffDataType[], и далее по идентификатору поля exif таблицы разбирать данные?

Именованные методы предназначены для упрощения получения нужных полей. Если какой-то конкретный метод не работает, то это баг. И мы обязательно его будем исправлять.
Если говорить конкретно про метод getPhotographicSensitivity, то он будет исправлен в следующей версии библиотеки.

Спасибо Вам большое за быстрое реагирование на возникшую проблему!
Думаю, тему можно считать закрытой, надо ли мне где-то пометить, что она закрыта?

Рады были помочь. :slightly_smiling_face:
Я закрою тему.