Можно делать через canvas, можно через Node.js.
Сложный алгоритм:
- Прочитать данные изображения (ширина, высота)
- "Достать" те пиксели, которые не равны цвету фона (например, картинка белого фона, а буквы логотипа - чёрные) - назовём их "позитивные"
- Сгруппировать всю картинку по ячейкам определенных размеров (например, 1 ячейка - это 50х50 px, размеры подберите исходя из п. 1)
- "Закрасить" ячейки необходимой картинкой
- Найти пересечения ячеек и "позитивных" пикселей
- Отобразить те ячейки, которые пересекаются с "позитивными" пикселями
Простой алгоритм: как посоветовал товарищ
iBird Rose, используйте маски
Готовые варианты:
https://github.com/gustavomazzoni/photo-mosaic
https://github.com/cemiltokatli/PhotoMosaic