Про алгоритм не расскажите, я в этом деле новичок и мало что понимаю
у нас решение атипичное. мы храним оригинал, а нужные размеры генерим на ходу, при этом кэш создается по тому же пути, который вызывается с браузера, то есть генерация происходит только один раз, а дальше всё отдаётся веб-сервером без участия php.
знатный велосипед, но пока что объективной потребности для переписывания у бизнеса нет.
как именно генерить тумбнейлы - это уже вам решать, у всех своя логика по размерам, обрезанию и прочему.