Как создать большой файл изображения из многих мозаик в Java?

Моя программа производит изображения мозаик 3000x3000 пикселей 10 x 10, один за другим (в настоящее время сохраняемый в 100 названных файлов image_x_y.jpg)

Я хочу собрать эти 100 изображений в одно большое изображение, не загружая все в памяти. Моя цель состоит в том, чтобы создать один большой файл изображения, 30'000 * 30'000 пикселей.

Я ищу способ сделать это, не используя JAI (который не может быть установлен из общедоступных репозиториев знатока, я не понимаю почему),

Существует ли способ сделать это с чистым java2D? Или другая библиотека существует, способная обработать это?

Моя исходная идея состояла в том, чтобы создать очень большое буферизованное изображение от DataBuffer, поддержанного в файл на диске. Но я не уверен, что это возможно. Кто-либо когда-либо делал это?

7
задан Laurent K 5 August 2010 в 08:09
поделиться

3 ответа

Я хочу собрать эти 100 изображений в одно большое изображение, не загружая все в память. Моя цель - создать один большой файл изображения размером 30 000 * 30 000 пикселей.

Я считаю, что в JAI есть класс, который этим занимается. Какие бы проблемы у вас ни возникали при интеграции JAI в ваш проект, я бы упорно продолжал это делать, а не выпускал вашу собственную версию. В Java2D ничего подобного нет.

Моя первоначальная идея заключалась в том, чтобы создать очень большое буферизованное изображение из буфера данных с резервной копией в файл на диске. Но я не уверен, что это возможно. Кто-нибудь когда-либо делал это?

Да, я написал неполную реализацию этого. Он состоит из

  • A DataBuffer , который поддерживается ByteBuffer вместо массива (если буфер прямой, он может быть отображен в файл).
  • A WritableRaster , подобный стандартным растрам, но использующий мою реализацию DataBuffer (стандартные растры в читерской программе JDK, содержащие ссылку на резервный массив. В случае прямого ByteBuffer , поэтому, к сожалению, вам придется повторно реализовать большинство методов Raster .)

Я не рекомендую расширять SampleModel , потому что ваш класс не будет работать с растрами JDK (различные методы в Java2D, включая фабричные методы Raster , включают тип SampleModel , предполагая, что это один из стандартных. Плохой дизайн IMHO, но вы мало что можете с этим поделать, кроме следуйте той же схеме.)

6
ответ дан 7 December 2019 в 05:15
поделиться

Если у вас проблемы с использованием ресурсов из публичного maven-репозитория, вы можете использовать Nexus, maven proxy, и вручную добавить туда JAI jar (и добавить его в список репозиториев).

Преимущество этого решения в том, что у вас будет JAI и стандартный способ использовать не-maven ресурсы (все библиотеки javax) в maven.

Не возитесь с этим самостоятельно, вопрос визуализации сложен из-за всех вовлеченных сжатий, и работа с BMP на диске, учитывая ваши размеры изображений (около 100 * 30MB = 3GB), вероятно, не является оптимальной и быстрой.

1
ответ дан 7 December 2019 в 05:15
поделиться

Я не знаю, возможно ли это без загрузки всего в память. Вы можете выгрузить все свои изображения в несжатый BMP, а затем использовать какой-либо внешний инструмент для преобразования его в jpg.

1
ответ дан 7 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: