Ну, данные изображения, которые вы получаете от объекта canvas с помощью getImageData, являются просто информацией о пикселях RGBA, то есть красной, зеленой, синей и альфа-прозрачностью.Таким образом, вы можете получить данные изображения и просто выполнить итерацию, просматривая четыре пикселя за раз.Когда вы видите белый, вы можете просто обнулить его (вместе с альфа-значением).
Теперь дело в том, что вы не будете удовлетворены результатами, потому что все еще будет "ореол"вокруг цветных элементовИсходное изображение (вероятно) слегка размыто, эффективно сглажено по краям цветных областей.Таким образом, по краям есть пиксели, которые немного светлее основного изображения, и вы увидите их еще после удаления всех чисто белых.
В действительности очистить края довольно сложно, в зависимости откакие именно исходные изображения у вас есть.Я не думаю, что это передовая обработка изображений или что-то еще, но это не тривиально.