powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение Thumbnail
14 сообщений из 14, страница 1 из 1
Получение Thumbnail
    #37672618
eml78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть примерно такой код
Код: java
1.
2.
3.
4.
5.
6.
7.
ImageReader reader = getImageReader(diskObject);
if (reader.readerSupportsThumbnails()) {
    if (reader.hasThumbnails(0)) {
        image = reader.readThumbnail(0, 0);
    } else {
        читаем картинку и делаем ей resize
    }


но поскольку JPEGImageReader не умеет разбирать секции EXIF (JPEG.APP1), то и Thumbnail в jpeg он тоже не видит. А из больших картинок делать маленькие путем resize долго. Есть библиотека metadata-extractor которая умеет парсить EXIF, но читать весь файл второй раз очень не хочется (т.к. опять же требует времени), тем более что JPEGImageReader хотя и не умеет парсить EXIF, но (!!!) он его читает (в виде массива байт) и сохраняет у себя в JPEGMetadata.
metadata-extractor может чичтать как файлы и так и отдельные секции в виде массива байт - поэтому вроде бы все просто - нужно взять массив байт из JPEGMetadata и отдать его metadata-extractor.
И вот тут возникла проблема - доступ к данным JPEGMetadata ограничен:
Код: java
1.
2.
3.
4.
5.
6.
7.
public class JPEGMetadata extends IIOMetadata implements Cloneable {
...  
    List markerSequence = new ArrayList();
...
    MarkerSegment findMarkerSegment(int tag) { ... }
...
}


Код: java
1.
2.
3.
4.
5.
class MarkerSegment implements Cloneable {
...
    byte [] data = null;  // Raw segment data, used for unrecognized segments
...
}


Читал что через Reflection можно добраться до закрытых свойств и методов, но тут вот целый класс спрятали... и главное непонятно зачем??? Если данные не нужны, так и не хранили бы, а так вроде все есть, но JPEGMetadata этот массив нафиг не нужен, ибо он таких тэгов не знает, а никому другому доступа нет...

Если кто знает как добраться до этих данных, просьба подсказать.
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37672644
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так может подключить ImageReader, который умеет?
http://download.java.net/media/jai-imageio/javadoc/1.1/overview-summary.html#JPEG
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37672672
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37672738
eml78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные таки получил..., но это конечно очень черз-одно-местный способ.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    private static byte[] findMarkerData(ImageReader reader, int tag) {
        try {
            IIOMetadata jpegMetadata = reader.getImageMetadata(0);
            if (jpegMetadata instanceof JPEGMetadata) {
                Class msClass = JIUtility.class.getClassLoader().loadClass("com.sun.imageio.plugins.jpeg.MarkerSegment");
                Method findMarkerSegment = jpegMetadata.getClass().getDeclaredMethod("findMarkerSegment", Integer.TYPE);
                findMarkerSegment.setAccessible(true);
                Object markerSegment = findMarkerSegment.invoke(jpegMetadata, tag);
                Field msData = msClass.getDeclaredField("data");
                msData.setAccessible(true);
                return (byte[]) msData.get(markerSegment);
            }
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return null;
    }


to Blazkowicz
По поводу борьбы читал, там похоже написали собственную читалку JPEG, т.е. вариант мало чем отличается от использования metadata-extractor (хотя могу и ошибаться там много кода).
По поводу JAI - насколько я понимаю это отдельная читалка со своим API, вопрос в том можно ли ее встроить в ImageIO на уровне провайдера? И если да, то хотя бы кратенький примерчик как?
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37672833
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eml78По поводу JAI - насколько я понимаю это отдельная читалка со своим API, вопрос в том можно ли ее встроить в ImageIO на уровне провайдера? И если да, то хотя бы кратенький примерчик как?
На практике не сталкивался. Но на сколько я понимаю, достаточно в classpath положить, тогда ImageIO должен использовать евойные ридеры\райтеры. Это же SPI.
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37672864
eml78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Blazkowicz
Пробовал, не получилось - во-первых, похоже что ридеры\райтеры нужно руками регистрировать (я так ридер для ICO подключал), а для этого нужно знать весь список. А во-вторых в JAI 1.1.3 который на офф сайте выложен вообще нет пакетов com.sun.media.imageio.plugins.*, там com.sun.media.jai.* и javax.media.jai.*
А по ссылкам на сайт http://java.net/projects/jai я тыкался но так и не нашел где скачать рабочую версию (там только исходники из svn качать можно) - то ли я глупый, то ли интерфейс такой.
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37673151
eml78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JAI вроде заработал там оказывается еще PATH нужен, т.к. dll используются, но его ридер для jpg через метод readerSupportsThumbnails выдает false...
Так что тут наверное стоит согласиться с автором статьи - тащить несколько Мб, заставлять пользователя менять переменную PATH, а потом еще доступ видимо через одно место, т.к. стандартные методы ImageIO не работают - крайне сомнительное удовольствие.
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37673184
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eml78JAI вроде заработал там оказывается еще PATH нужен, т.к. dll используются, но его ридер для jpg через метод readerSupportsThumbnails выдает false...
Так что тут наверное стоит согласиться с автором статьи - тащить несколько Мб, заставлять пользователя менять переменную PATH, а потом еще доступ видимо через одно место, т.к. стандартные методы ImageIO не работают - крайне сомнительное удовольствие.
DLL можно и без PATH подключить. Но если thumbnail всё равно не работают. Тогда ваш способ однозначно лучше. Можно взять OpenJDK и пропатчить.
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37673902
eml78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczDLL можно и без PATH подключить.
Тогда их видимо придется в системный каталог выложить, т.к. JAI вроде не находит dll, которые лежат в том же каталоге что и jar. Или вы имели в виду что-то другое?
BlazkowiczНо если thumbnail всё равно не работают.
Возможно это потому что у меня JAI Tools версии 1.0, но на офф сайте ссылка на версию 1.1 не работает. А других вариантов для скачивания найти пока не удалось. Может у кого есть, выложите, pls или ссылочку...
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37673985
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eml78Тогда их видимо придется в системный каталог выложить, т.к. JAI вроде не находит dll, которые лежат в том же каталоге что и jar. Или вы имели в виду что-то другое?

System.load(), Runtime.load() загружают из указанного места. Можно попробовать сначал загрузить этим методом, потом запустить JAI.


eml78Возможно это потому что у меня JAI Tools версии 1.0, но на офф сайте ссылка на версию 1.1 не работает. А других вариантов для скачивания найти пока не удалось. Может у кого есть, выложите, pls или ссылочку...
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-client-419417.html#7341-JAI-1.1.2-oth-JPR
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37674031
eml78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-client-419417.html#7341-JAI-1.1.2-oth-JPR
Я там был но там нет даже ссылки на Tools 1.1 - только 1.0.01 (Java Advanced Imaging Image I/O Tools 1.0_01)
Вот здесь она есть http://www.oracle.com/technetwork/java/current-142188.html, но не работает .... (404 page not found)
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37674046
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37674104
eml78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz http://code.google.com/p/jaitools/source/browse/#svn%2Ftags
называется похоже, но судя по содержимому - это не тот проект :(
"Правильный проект" :) лежит здесь http://java.net/projects/jai-imageio но там есть только исходники в svn (бинарная версия отсутствует). Собрать конечно можно, но это на мой взгляд неправильный метод для сторонних библиотек..., тем более что предыдущие версии на сайте Oracle доступны в собранном виде.
...
Рейтинг: 0 / 0
Получение Thumbnail
    #37674126
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eml78,
- точно во всех файлах ЗАПОЛНЕН exif превьюшкой? Самому генерировать не надо?
- там вроде формат простой 50 килобайт - превьюшка. Может самому выцепить?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение Thumbnail
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]