Jak używać płótna JavaScript, aby dodać niestandardowe obramowanie do zamaskowanego obrazu

Jak używać płótna JavaScript, aby dodać niestandardowe obramowanie do zamaskowanego obrazu
Jak używać płótna JavaScript, aby dodać niestandardowe obramowanie do zamaskowanego obrazu

Opanowanie zamaskowanych obramowań obrazów w JavaScript Canvas

Fuzja wielu obrazów jest częstym krokiem w tworzeniu efektów wizualnych JavaScript. Często stosowaną techniką jest definiowanie widocznych obszarów obrazu za pomocą maski. Chociaż jest to pomocne przy tworzeniu unikalnych formularzy, dodanie obramowania wokół tych zamaskowanych kształtów może być trudne. Chociaż płótno Element w JavaScript umożliwia szeroką manipulację obrazem, nie jest łatwo dostosować obramowanie wokół zamaskowanego obrazu.

Programiści mogą nakładać maski i przycinać obrazy w pomysłowy sposób za pomocą narzędzia API kanwy, chociaż domyślnie każda wygenerowana ramka ma tendencję do dopasowania do prostokątnego kształtu płótna. Jeśli chcesz utworzyć obramowanie pasujące do krawędzi skomplikowanego kształtu zdefiniowanego przez maskę, stanowi to problem. Celem jest dokładne prześledzenie podróży maski poza prostą prostokątną granicę.

W tym poście wyjaśniono, jak zastosować maskę obrazu w JavaScript i, co ważniejsze, jak upewnić się, że wyraźny kształt zamaskowanego obrazu jest otoczony ramką. Dodatkowo omówimy funkcję, która kończy maskowanie, ale nie ma jeszcze zdefiniowanego rozwiązania granicznego.

Możesz dostosować wygląd obramowania, ucząc się, jak pracować z operacjami złożonymi na płótnie. Zacznijmy i zobaczmy, jak używać funkcji canvas JavaScriptu, aby dodać niezbędne obramowanie wokół zamaskowanego obrazu.

Rozkaz Przykład użycia
globalCompositeOperation Ta funkcja określa kompozycję działań rysunkowych na płótnie. GlobalCompositeOperation ='source-in' w tym przykładzie zapewnia, że ​​obraz maski przycina główny obraz, tak że widoczne są tylko obszary, które się przecinają.
toDataURL() Przekształca informacje o kanwie w obraz zakodowany w formacie Base64. Umożliwia to wykorzystanie gotowego obrazu jako pliku PNG po nałożeniu maski i obramowania. Przykładowy obraz wyjściowy jest generowany przy użyciu canvas.toDataURL('image/png').
crossOrigin Ta funkcja uwzględnia ograniczenia bezpieczeństwa, umożliwiając wykorzystanie w kanwie obrazów załadowanych z innej domeny. MaskImg.crossOrigin = 'anonymous' gwarantuje, że dostęp do obrazu maski będzie możliwy bez powodowania problemów z CORS.
beginPath() Za pomocą tej metody można rozpocząć na kanwie nową ścieżkę. Druga metoda wywołuje funkcję ctx.beginPath(), aby upewnić się, że ścieżka przylega do konturu maski podczas rysowania niestandardowej ramki wokół zamaskowanego obrazu.
moveTo() Dzięki tej procedurze nie są wykonywane żadne rysunki; zamiast tego „pióro” zostaje przeniesione do nowego miejsca początkowego. Punkt początkowy granicy jest w przykładzie pozycjonowany za pomocą ctx.moveTo(0, 0), co jest niezbędne do dokładnego narysowania granicy wokół granic maski.
lineTo() Wykorzystując podane współrzędne jako punkt wyjścia, technika ta rysuje linię prostą. Granicę zamaskowanego obrazu wyznaczają linie narysowane w rozwiązaniu za pomocą ctx.lineTo(maskImg.width, 0).
stroke() Wzdłuż wyznaczonej ścieżki rysuje granice lub linie. Na przykład metody moveTo() i lineTo() służą do zdefiniowania formy maski, a następnie metoda ctx.stroke() służy do zastosowania obramowania wokół zamaskowanego obrazu.
lineWidth Określa grubość linii malowanych na płótnie. Skrypt ustanawia ramkę o grubości 5 pikseli wokół kształtu maski przy użyciu parametru ctx.lineWidth = 5.
strokeStyle Wskazuje kolor lub styl obramowania. Kolor obramowania w przykładzie jest ustawiony na czerwony za pomocą polecenia ctx.strokeStyle ='red'.

Rozpoznawanie sposobu zastosowania obramowania do zamaskowanego obrazu

Celem dostarczonych skryptów jest użycie innego obrazu jako maski dla jednego obrazu, a następnie użycie API kanwy , aby dodać niestandardowe obramowanie wokół zamaskowanego kształtu. Na początku funkcji dla maski i obrazu głównego tworzone są dwa nowe obiekty obrazu. Podczas ładowania zdjęć ze źródeł zewnętrznych ustawienie cross-origin jest niezbędne, aby zapobiec problemom wynikającym z CORS. Po załadowaniu obu obrazów tworzone jest płótno, którego proporcje są dopasowywane do obrazu maski. Pozwala to uniknąć problemów ze zmianą rozmiaru podczas rysowania obrazu i gwarantuje, że płótno jest przygotowane do pracy z odpowiednim obszarem.

Następnie skrypt używa narysujObraz() funkcja rysowania obrazu maski na płótnie. W ten sposób na płótno nakładana jest maska, która służy jako warstwa podkładowa do zabiegu maskowania. Aby poprawnie zastosować maskę, globalna operacja złożona musi być ustawiona na „source-in”. Płótno ma zachować tylko te obszary obrazu głównego, które pokrywają się z obrazem maski. Zasadniczo maska ​​określa kształt, do którego przycinany jest główny obraz. Operacja złożona jest resetowana do „przechodzenia do źródła”, gdy główny obraz jest rysowany wewnątrz tego obszaru przycinania, umożliwiając dodatkowe działania, takie jak malowanie obramowania, bez wpływu na wcześniej przyciętą zawartość.

Nałożenie obramowania na zamaskowany kształt wymaga użycia opcji udar mózgu() technika. To polecenie wskazuje określoną ścieżkę lub formularz na płótnie. W drugim rozwiązaniu funkcje moveTo() i lineTo() są połączone w celu ręcznego wygenerowania ścieżki obszaru roboczego i śledzenia granic maski. Korzystając z tych technik, możesz ręcznie określić kształt obramowania i upewnić się, że przylega ono do kształtu maski, a nie do prostokątnej granicy płótna. Masz pełną kontrolę nad wyglądem obramowania, ponieważ Szerokość linii Właściwość ustawia grubość obramowania i Styl udaru właściwość określa jego kolor.

Na koniec funkcja toDataURL() służy do przekształcania obszaru roboczego w ciąg znaków Base64. W ten sposób gotowy obraz – łącznie z maską i obramowaniem – jest przekształcany do formatu, który można łatwo wykorzystać w innych obszarach programu lub przesłać na serwer. Aby uniknąć błędów w synchronizacji, obietnica zapewnia, że ​​operacja ta zakończy się dopiero po całkowitym załadowaniu obu obrazów. Skrypty te pokazują, jak wyrafinowane techniki modyfikacji obrazu, w tym maskowanie i stosowanie dynamicznego obramowania, które dokładnie pasuje do konturów maski, można zrealizować za pomocą elementu canvas JavaScriptu.

Metoda 1: Użycie metody płótna i obrysu w celu dodania niestandardowego obramowania do zamaskowanego obrazu

Aby zbudować ramkę wokół zamaskowanego obrazu, podejście to wykorzystuje JavaScript i API Canvas. Stroke() służy do obrysowania zamaskowanego kształtu.

function applyFiltersAndConvertToBase64(imageUrl, materialImage) {
    return new Promise((resolve, reject) => {
        const maskImg = new Image();
        const mainImg = new Image();
        maskImg.crossOrigin = "anonymous";
        mainImg.crossOrigin = "anonymous";
        let imagesLoaded = 0;
        const onLoad = () => {
            imagesLoaded++;
            if (imagesLoaded === 2) {
                const canvas = document.createElement('canvas');
                const ctx = canvas.getContext('2d');
                canvas.width = maskImg.width;
                canvas.height = maskImg.height;
                ctx.drawImage(maskImg, 0, 0);
                ctx.globalCompositeOperation = 'source-in';
                ctx.drawImage(mainImg, 0, 0, maskImg.width, maskImg.height);
                ctx.globalCompositeOperation = 'source-over';
                ctx.lineWidth = 5; // Border thickness
                ctx.strokeStyle = 'red'; // Border color
                ctx.stroke(); // Draw border around mask
                const base64Image = canvas.toDataURL('image/png');
                resolve(base64Image);
            }
        };
        maskImg.onload = onLoad;
        mainImg.onload = onLoad;
        maskImg.onerror = reject;
        mainImg.onerror = reject;
        maskImg.src = imageUrl;
        mainImg.src = materialImage;
    });
}

Opcja 2: Utwórz niestandardową ramkę wokół kształtu maski, używając ścieżki płótna

Ta metoda zapewnia, że ​​obramowanie ściśle odpowiada zamaskowanemu kształtowi, podążając ścieżką maski obrazu przy użyciu interfejsu API Canvas z JavaScript.

function applyFiltersAndConvertToBase64(imageUrl, materialImage) {
    return new Promise((resolve, reject) => {
        const maskImg = new Image();
        const mainImg = new Image();
        maskImg.crossOrigin = "anonymous";
        mainImg.crossOrigin = "anonymous";
        let imagesLoaded = 0;
        const onLoad = () => {
            imagesLoaded++;
            if (imagesLoaded === 2) {
                const canvas = document.createElement('canvas');
                const ctx = canvas.getContext('2d');
                canvas.width = maskImg.width;
                canvas.height = maskImg.height;
                ctx.drawImage(maskImg, 0, 0);
                ctx.globalCompositeOperation = 'source-in';
                ctx.drawImage(mainImg, 0, 0, maskImg.width, maskImg.height);
                ctx.globalCompositeOperation = 'source-over';
                // Create path for the mask shape
                ctx.beginPath();
                ctx.moveTo(0, 0);
                ctx.lineTo(maskImg.width, 0);
                ctx.lineTo(maskImg.width, maskImg.height);
                ctx.lineTo(0, maskImg.height);
                ctx.closePath();
                ctx.lineWidth = 5; // Border thickness
                ctx.strokeStyle = 'blue'; // Border color
                ctx.stroke(); // Apply the border along the path
                const base64Image = canvas.toDataURL('image/png');
                resolve(base64Image);
            }
        };
        maskImg.onload = onLoad;
        mainImg.onload = onLoad;
        maskImg.onerror = reject;
        mainImg.onerror = reject;
        maskImg.src = imageUrl;
        mainImg.src = materialImage;
    });
}

Ulepszanie zamaskowanych obrazów za pomocą niestandardowych obramowań w JavaScript

Komfort użytkowania aplikacji JavaScript można znacznie poprawić dzięki możliwości maskowania obrazów i ustawiania niestandardowych obramowań podczas pracy z plikami JavaScript API kanwy. Za pomocą maskowania możesz zdecydować, które obszary obrazu będą widoczne w zależności od innego obrazu, zwanego maską. Dodanie obramowania wokół zamaskowanej strefy to problem, z którym spotyka się wielu programistów, szczególnie gdy maska ​​nie ma prostego prostokątnego kształtu. Projekty z ramkami dokładnie dopasowanymi do konturu maski będą wyglądać na bardziej dopracowane i fachowe.

Przydatnym rozwiązaniem tego problemu jest użycie API Canvas Ścieżka2D obiekt. Możesz używać Path2D do projektowania skomplikowanych tras, które pasują do konturów maski, a następnie otaczają je ramką. Ta metoda pozwala wygenerować obramowania dokładnie dopasowane do rogów niestandardowej maski, wykraczające poza konwencjonalne prostokąty. Używanie moveTo() I lineTo() razem ułatwiają prześledzenie konturu maski i gwarantują precyzyjnie wyrównane obramowanie.

Wydajność to kolejny ważny czynnik, który należy wziąć pod uwagę, szczególnie podczas pracy z większymi obrazami lub dynamicznego stosowania obramowań w czasie rzeczywistym. Szybkość aplikacji można zwiększyć, stosując strategie takie jak buforowanie zamaskowanego obrazu, ograniczenie operacji rysowania i usprawnienie procesu renderowania płótna. Nawet w przypadku skomplikowanych lub wymagających ustawień możesz zagwarantować, że procedury maskowania i rysowania krawędzi przebiegną sprawnie, redukując niepotrzebne działania.

Często zadawane pytania dotyczące maskowania i obramowania obrazów za pomocą płótna

  1. Jak w JavaScript mogę użyć innego obrazu, aby go zamaskować?
  2. Używanie 2 zabierać się do pracy 'source-in', narysuj maskę na płótnie, aby zamaskować obraz za pomocą API kanwy. Aby dopasować maskę, spowoduje to przycięcie głównego obrazu.
  3. Jak mogę utworzyć obramowanie zamaskowanego obrazu, które odpowiada jego kształtowi?
  4. Po ustaleniu trasy maski za pomocą moveTo() I lineTo(), skorzystaj z stroke() technika. Dzięki temu możesz otoczyć kształt maski personalizowaną obwódką.
  5. Jaki jest cel toDataURL() w manipulacji płótnem?
  6. Zawartość obszaru roboczego jest przekształcana w obraz zakodowany w formacie Base64 za pośrednictwem pliku toDataURL() funkcję, dzięki czemu można go łatwo używać lub rozpowszechniać jako obraz PNG.
  7. Jak zoptymalizować operacje na płótnie pod kątem wydajności?
  8. Zmniejsz liczbę operacji rysowania i pomyśl o przechowywaniu często używanych elementów, aby zmaksymalizować prędkość pracy z płótnem. Dzięki temu aplikacja działa płynnie i zmniejsza liczbę przerysowań.
  9. Czy mogę załadować obrazy z różnych źródeł na kanwę?
  10. Tak, ale aby udostępnić obraz bez powodowania problemów z CORS, musisz ustawić crossOrigin własność do 'anonymous'.

Końcowe przemyślenia na temat maskowania i obramowań

W aplikacjach JavaScript maskowanie obrazów i stosowanie niestandardowych obramowań na płótnie to skuteczny sposób na tworzenie dopracowanych elementów wizualnych. Programiści mają możliwość manipulowania renderowaniem i stylizacją obrazów, korzystając z narzędzia API kanwy oraz zaawansowane polecenia rysowania, takie jak udar mózgu() i definicje ścieżek.

Płynną pracę zapewnia staranna optymalizacja operacji obramowania i maskowania, szczególnie w przypadku większych zdjęć. W tym samouczku przedstawiono użyteczną metodę dynamicznego malowania obramowań wokół obrazów innych niż prostokątne, co jest przydatne podczas tworzenia aplikacji internetowych, które są zarówno estetyczne, jak i responsywne.

Odniesienia do technik maskowania i obramowania na płótnie
  1. Szczegółowy przewodnik dotyczący użytkowania API kanwy do manipulowania obrazami i maskami, w tym operacji rysowania, takich jak 4 I 2: Dokumenty internetowe MDN .
  2. Kompleksowe wyjaśnienie, jak zastosować maskowanie obrazu i obsługę zasobów pochodzących z różnych źródeł w JavaScript: Poradniki HTML5 Canvas .
  3. Wskazówki dotyczące wydajności aplikacji opartych na kanwie, skupiające się na optymalizacji renderowania obrazów i operacji rysowania: Wstrząsający magazyn .