Есть ли возможность в css \ js наложить цвет по форме изображения?
Если иконки на белом фоне можно использовать filter: grayscale(), если нет, то нужно использовать canvas
Я так понимаю, проблема в том, что будет загружена картинка, например круг, а края будут прозрачны, так? И круг, скажем, зеленого цвета. А Вам при наведении надо окрашивать его в красный. 
На мой взгляд тут два варианта:
1. Воспользоваться примером @Symphony, картинку с инвертированной прозрачностью создавать на сервере. Я не бэкэндщик, но уверен, что это не трудно сделать. А для подбора цвета картинки без наведения определять основной цвет картинки также на сервере.
2. Если загружаемая картинка имеет много цветов, то тогда уже использовать спрайт. На сервере создавать спрайт, в котором слева будет оригинал, а справа исправленная копия, где все не прозрачные пикселы будут иметь красный цвет.
Правда, боюсь, возникнут проблемы с антиалиасингом изображений.