Вы можете нарисовать фото и шаблон на холсте. Я не уверен насчет fabric.js, но если бы вы вызывали функции canvas напрямую, вы бы просто ...
ctx = canvas.getContext('2d');
ctx.DrawImage(user_img, x,y);
ctx.DragImage(template_imb, 0, 0);
Когда пользователь перетаскивает мышью обновление x и y и перерисовывает оба слоя. Очевидно, убедитесь, что отверстие в шаблоне прозрачно. Вы можете добавить ширину и высоту к вызову DrawImage, если хотите, чтобы пользователь мог изменять размер изображения, просто предоставьте некоторый элемент управления для их изменения.