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

Здравствуйте.

Мне нужно сделать единый jpg файл из кучи моих изображений.
Он будет в виде квадрата со стороной в 12 файлов, каждый из которых имеет изображение.(5910x5910). Один такой файл на текущий момент занимает 3.5мб.
Части файлов у меня нет - в итоговом изображении эти места будут заменены белыми квадратами.
На текущий момент я использую компьютер с 2гб ОЗУ.

Программы:
1) python 2.7 + PIL. При попытке создать изображение с разрешением 20к*10к - у меня зависает компьютер. Так бы я сделал вставкой в новое изображение по очереди всех имеющихся
2) imagemagick. Нашел эту программу в поиске - в консольном режиме может склеить изображения, но при склейке 4 моих изображений в 1 также надолго зависает.

Также есть компьютер с 16гб ОЗУ, его пока не пробовал.

Посоветуйте что делать.
  • Вопрос задан
  • 5386 просмотров
Пригласить эксперта
Ответы на вопрос 2
Spetros
@Spetros
IT-шник
Для того, чтобы создать одно большое изображение из нескольких других эти несколько изображений нужно распаковать, склеить и только после этого сжать в требуемый формат. Изображение с разрешением 20к*10к вместе с исходными файлами в несжатом виде в 2ГБ ОЗУ не поместится.
Пробуйте использовать компьютер с 16ГБ.
Ответ написан
@zedxxx
Не знаю, ограничены ли вы только скриптами или можете использовать что-то кроме них, но посоветую использовать библиотеку libjpeg (или её прокаченный вариант libjpeg-turbo) и её функции для построчного чтения и записи в jpeg файл (scanline методы). В этом случае, вам понадобится очень мало памяти (несколько мегабайт) для выполнения вашей задачи, но придётся поработать с низкоуровневым api сишной библиотеки.

У этой же библиотеки есть и ещё одна фишка - lossless склейка jpeg файлов. Для этого даже написана консольная утилита jpegtran, которая идёт в архиве с библиотекой. Только эта фишка уже использует оперативку по полной и 16Гб вам очень пригодятся.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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