Я бы не пошел по этому пути на твоем месте. Конечно, вы можете сэкономить несколько байтов в служебных данных протокола, уменьшив количество запросов, но это, скорее всего, приведет к саморазрушению.
Представьте себе этот сценарий:
Блог-сайт, на главной странице которого есть 10 статей одновременно. С каждой статьей связано собственное изображение. Чтобы сэкономить один или два байта времени передачи, вы программно создаете составное изображение из всех 10 изображений статьи. Теперь у вас есть одна из двух проблем.
- Вы должны обновлять составное изображение каждый раз, когда создается новое сообщение, поскольку самые последние 10 изображений будут иметь измененный набор содержимого.
- Вы решаете создавать новый составной каждый запрос на лету.
Очевидно, что # 1 здесь предпочтительнее, и его не составит труда реализовать. Однако что делать, если пользователь ищет все сообщения, помеченные словом «SQL»? Вы вряд ли получите составное изображение первых 10 результатов, уже созданных для этого простого запроса, не говоря уже о более сложном. Кроме того, что произойдет, если вы захотите обновить или удалить изображение? Еще раз вам придется запустить фоновое создание композита.
Как насчет агрегатора RSS, такого как Google Reader? У него не было бы необходимой логики, чтобы выяснить, какую часть составного изображения нужно будет отобразить, и, вероятно, отображалось бы полное изображение. (Я упоминаю Google Reader, потому что очень редко посещаю сайты блогов напрямую, склоняясь к доверию службе агрегации RSS, такой как Reader)
Если бы это был я, я бы оставил одиночные изображения в покое. При современных скоростях соединения компромисс между дополнительными затратами полосы пропускания и временем обработки на сервере вряд ли выиграет вас и принесет большие выгоды.
Сказав, что, если вы все равно решите пойти по этому пути, я бы сказал, что библиотека GD - отличное место для старта.