Nie jestem, o ile mi wiadomo, w stanie zastosować CSS do grafiki w elemencie canvas HTML5 (ponieważ nie są one częścią DOM).
Jednak jest OK! Nadal możemy wykonać podstawowe efekty filtrowania stosunkowo łatwo i zapisać je jako obraz z zaledwie kilkoma liniami JavaScript.
Znalazłem dobry artykuł, który przechodzi przez zastosowanie sepia-like effect to the canvas and saving it as an image. Zamiast kopiować, podświetlę większe artykuły z tego artykułu.
Modyfikowanie obraz płótno:
var canvas = document.getElementById('canvasElementId'),
context = canvas.getContext('2d');
var imageData = context.getImageData(0, 0, canvas.width, canvas.height);
for (var i = 0; i < imageData.data.length; i+=4) {
...
}
W celu uzyskania dostępu do niektórych płótnie API, musisz aktywować 2d kontekst na płótnie przy użyciu wyżej JavaScript. MDN ma świetną dokumentację na temat interfejsu API, która jest dostępna dla użytkownika pod numerem context object, ale ważną rzeczą, o której warto pamiętać, jest wywołanie getImageData()
. Zasadniczo pobierze wszystkie wartości pikseli w zdefiniowanym obszarze (w powyższym przypadku przechwytywamy cały obraz). Następnie, mając te dane w ręce, możemy dokonać iteracji poprzez wszystkie piksele i zmienić je w razie potrzeby. W modelu sepia article można oczywiście wprowadzić pewne interesujące zmiany, ale w razie potrzeby można również wykonać skalę szarości, rozmycie lub wszelkie inne zmiany, a do tego jest niesamowity canvas filters library on Github.
Jak zapisać obraz płótno:
var canvas = document.getElementById('canvasElementId'),
image = document.createElement("img");
image.src = canvas.toDataURL('image/jpeg');
document.body.appendChild(image);
Powyższy skrypt wybrać płótno (zakładając, że już zrobione rysunki) i utworzyć element obrazu. Używa ich toDataURL()
do generowania adresu URL, którego można użyć do ustawienia źródła na elemencie obrazu. W powyższym przykładzie element obrazu jest dołączany do treści dokumentu. Możesz zobaczyć więcej informacji na MDN's canvas page.
Czy to rozwiązano? bo miałem ten sam problem. – user3508453
o tym samym problemie – Ronnie