1) Не совсем понятно зачем вам вообще генерировать картинки нужного размера в момент обращения к ним. Обычно все варианты картинок генерируются в момент загрузки.
2) Если все же вам так удобнее, в любом случае в том месте где вы будите хранить картинки (и формировать их налету) вам придется писать некий код-предобработчик. Например, Nginx сначала пытается получить ассет, а если не находит, то передает управление программной части, которая и занимается формированием и сохранением картинки. Сразу после первого обращения к картинке она будет создана и Nginx будет сразу отправлять ее клиенту как готовый ассет, не передавая больше управление скрипту.
3) Никаких проблем с расшариванием изображений быть не может. В БД хранится только путь к ассету. Например /public/pics/flower.png. Поскольку вы сами программируете систему, как и на фронте, так и на бэке вы легко можете в константах задать конкретный путь к вашему CDN + установить свои правила формирования имен картинок.
Например:
В базе хранится только
/public/pics/flower_original.png
А дальше можно формировать на основе этого базового урла что угодно.
/public/pics/flower_8000_6000.png
/public/pics/flower_800_600.png
/public/pics/flower_80_60.png
Хранить в базе урлы ко всем вариантам картинок — это бред.