CSS не изменяет данные изображения, поэтому вы не можете использовать его для передачи измененного изображения в функцию JS. Полученные данные изображения после применения CSS вообще недоступны для вашего кода JS. Все, что вы можете получить, - это исходные данные изображения.
Кстати, ваш код заставляет переменную image
быть равной строке "grayscale(100%)"
, потому что результатом любого выражения присваивания является присвоенное значение, поэтому document.getElementById("D-image").style.webkitFilter = "grayscale(100%)"
возвращает "grayscale(100%)"
, тогда вы присваиваете этот результат своей переменной вместо элемента изображения. Вот почему он ломается, когда вы это делаете.
Вы должны изменить данные изображения. Есть способы получить необработанные данные изображения.
После того, как у вас есть эти данные, вам нужно выполнить некоторую обработку, чтобы сделать их оттенками серого, CSS не может служить здесь в качестве ярлыка. Возможно, это поможет .
После того, как вы изменили данные изображения, вы должны преобразовать их в формат, который может принять ваша функция. Похоже, он принимает HTML элементов, поэтому выясните, как превратить его обратно в элемент изображения, и у вас все должно получиться.