Одним из решений, которое придумали другие, является сочетание двух. Итак, пользователь загружает фотографию, а вы сохраняете ее в оригинальном виде на своем сервере. Затем, когда требуется аватар, вы проверяете, сохранен ли аватар на диске (возможно, user12345_50x50.jpg - где 50x50 - ширина x высоты). Если оно существует, покажите это изображение. Если нет, то используйте сервер для изменения размера / обрезки чего угодно, затем сохраните этот образ на диск и предоставьте его пользователю. Это позволит вам запрашивать файл любого размера и обслуживать его по мере необходимости - используя преимущества кэширования тех, которые уже были запрошены [Обратите внимание, что это серверный кэш, поэтому он будет применяться для всех пользователей. ].
Вы как бы получаете лучшее из обоих миров. Вам не нужно обрабатывать все манипуляции с изображениями заранее, так же, как это необходимо. При первой обработке изображения этот пользователь должен будет ждать, но любой другой запрос получит обработанный файл.
Одна из реализаций, которая использует это решение в PHP, это phpthumb: http://phpthumb.sourceforge.net/