Вопрос: Как склеить много фотографий в одну картинку?

Лучший ответ:
Самый бюджетный вариант коллажа с использованием браузера.
1. Копируете этот код и сохраняете в файле index.html;
2. Создаете каталог photo рядом с файлом index.html и закидываете туда уже пронумерованные по порядку фото.
3. Поправляете параметры:
а) В селекторе  "table tr td img" задаете width и height - размер одной миниатюры в коллаже.
б) Указываете photo_count - кол-во фоток в каталоге photo.
в) Указываете col_count - кол-во фоток в одном ряду коллажа.
г) Указываете start_pic_number - с какого номера начинается нумерация фоток.
д) Указываете filename_counter_size - размерность нумерации фоток, если идет 01, 02, 03 - то размерность 2,
если, например 00001, 00002, 00003, то размерность 5.
е) Задаете принцип формирования имени файла в filename.
Если расширение у вас не jpg, а например png, то строка будет выглядеть так:
var filename = filename_counter + '.png';
Если в имени файла есть какие-то постоянные символы, кроме счетчика, например они именуются DSC_0001.JPG, то имя файла будет формироваться так:
var filename = 'DSC_' + filename_counter + '.JPG';
Имя файла чувствительно к регистру символов!
ж) Корректируюете путь к файлу относительно страницы index.html, если требуется.
var filepath = 'photo/' + filename;
Фрагмент  'photo/' задает каталог с фотками.
Следует избегать именования каталога и фоток кириллицей.
4. Открываете index.html в браузере.
5. Если файлов много, то ждете окончания открытия страницы. Зависит от производительности компа, свободной оперативной памяти.
6. Если все в порядке, то миниатюры отобразятся. Это значит, что путь задан верно для фоток и фотки пронумерованы правильно и компу хватило ресурсов отобразить коллаж.
7. Делаем скриншот всей страницы:
Инструкция для браузера Google Chrome.
Ctrl+Shift+I — войти в режим разработчика.
Ctrl+Shift+M — нажать в нем на кнопку эмуляции просмотра в мобильных устройствах.
Нажать на кнопку меню в окне эмулации (см. в правый верхний угол страницы) и выбрать пункт «Capture full size screenshot».
После некоторого времени браузер "закачает" некий файл изображения.
Это и будет конечный результат - коллаж.
<html>
  <head>
    <style>
      html, body
      {
        margin: 0;
        padding: 0;
      }
      table
      {
        border: none;
      }
      table tr td img
      {
        width: 400px;
        height: 300px;
      }
      table tr td p
      {
        font-size: 10pt;
        text-align: center;
        margin-top: 0;
        margin-bottom: 0;
      }
    </style>
  </head>
  <body>
   <table id="container">
   </table>
   <script>
      function gen_collage()
      {
        var photo_count = 10; // кол-во фото в каталоге (нужно задать)
        var col_count = 5; // кол-во фото в одной строке коллажа (нужно задать)
        var row_count = photo_count / col_count + (photo_count % col_count > 0 ? 1 : 0); // вычисляем, сколько строк для генерации коллажа потребуется
        var start_pic_number = 1; // индекс первой фотки коллажа (если файлы начинаются, например, с 01.jpg, то нужно поставить 1)
        var filename_counter_size = 2; // размер счетчика с ведущими нулями, если поставить 2, то будет генерировать 01, 02, 03 и тд.
        var cur_pic_number = start_pic_number; // номер текущей фотки
        var table_inner = ''; // содержимое таблицы коллажа
        for(var i = 0; i < row_count; i++)
        {
          var row_pictures_inner = '<tr>'; // строка коллажа
          for(var j = 0; j < col_count; j++)
          {
            row_pictures_inner += '<td>'; // ячейка коллажа
            if(cur_pic_number - start_pic_number < photo_count)
            {
              var filename_counter = ('000000000' + cur_pic_number).substr(-filename_counter_size); // счетчик с ведущими нулями
              var filename = filename_counter + '.jpg'; // имя файла на основе счетчика (сейчас генерирует 01.jpg, 02.jpg и тд.)
              var filepath = 'photo/' + filename; // путь к файлу (сейчас задан относительный путь, файлы нужно поместить в каталог photo, index.html должен лежать рядом с каталогом photo)
              row_pictures_inner += '<div><img src="' + filepath + '"/><p>' + filename + '</p></div>'; // содержимое ячейки коллажа
            }
            row_pictures_inner += '</td>';
            cur_pic_number++;
          }
          row_pictures_inner += '</tr>';
          table_inner += row_pictures_inner;
        }
        document.getElementById('container').innerHTML = table_inner;
      }
      gen_collage();
   </script>
  </body>
</html>

Худший ответ:
ACDSee умеет искаропки делать такие штуки. Правда через принт, но это не проблема, например печатать в пдф или в universal document converter.