Cum să utilizați pânza JavaScript pentru a adăuga o chenar personalizată unei imagini mascate

Cum să utilizați pânza JavaScript pentru a adăuga o chenar personalizată unei imagini mascate
Cum să utilizați pânza JavaScript pentru a adăuga o chenar personalizată unei imagini mascate

Stăpânirea chenarelor imaginilor mascate în pânza JavaScript

Fuziunea mai multor imagini este o etapă comună în crearea efectelor vizuale JavaScript. Definirea zonelor vizibile ale unei imagini cu o mască este o tehnică frecventă. Deși acest lucru este util pentru crearea de forme unice, poate fi dificil să adăugați un chenar în jurul acelor forme mascate. Deși cel pânză element în JavaScript oferă o manipulare extinsă a imaginii, nu este ușor să ajustați chenarul în jurul unei imagini care a fost mascata.

Dezvoltatorii pot aplica măști și pot decupa imagini în moduri imaginative cu API-ul Canvas, deși în mod implicit, orice chenar generat tinde să se potrivească cu forma dreptunghiulară a pânzei. Când doriți să creați un chenar care se potrivește cu marginile unei forme complicate care este definită de o mască, aceasta prezintă o problemă. Obiectivul este de a urmări călătoria precisă a măștii dincolo de granița dreptunghiulară.

Această postare va explica cum să aplicați o mască de imagine în JavaScript și, mai important, cum să vă asigurați că forma distinctă a imaginii mascate este înconjurată de un chenar. În plus, vom trece peste o funcție care completează mascarea, dar nu are încă o soluție de frontieră definită.

Puteți ajusta aspectul chenarului învățând cum să lucrați cu operațiuni compozite în pânză. Să începem și să vedem cum să folosim funcțiile de pânză JavaScript pentru a adăuga chenarul necesar în jurul unei imagini mascate.

Comanda Exemplu de utilizare
globalCompositeOperation Compoziția acțiunilor de desen pe pânză este definită de această caracteristică. GlobalCompositeOperation ='source-in' din exemplu se asigură că imaginea măștii decupează imaginea principală, astfel încât să fie văzute doar zonele care se intersectează.
toDataURL() Transformă informațiile din pânză într-o imagine codificată cu Base64. Acest lucru face posibilă utilizarea imaginii finite ca PNG după aplicarea măștii și a chenarului. Ieșirea imaginii din exemplu este produsă folosind canvas.toDataURL('image/png').
crossOrigin Această caracteristică respectă restricțiile de securitate permițând utilizarea imaginilor încărcate dintr-un domeniu diferit în pânză. MaskImg.crossOrigin = „anonim” garantează că accesul la imaginea măștii se poate face fără a cauza probleme CORS.
beginPath() Pe pânză, o nouă cale poate fi începută folosind această metodă. A doua metodă apelează ctx.beginPath() pentru a se asigura că calea aderă la conturul măștii în timp ce desenează un chenar personalizat în jurul imaginii mascate.
moveTo() Cu această procedură nu se fac desene; în schimb, „pixul” este mutat într-un nou loc de început. Punctul de început al chenarului este poziționat în exemplu folosind ctx.moveTo(0, 0), care este esențial pentru a trasa cu precizie chenarul în jurul limitelor măștii.
lineTo() Folosind coordonatele date ca punct de plecare, această tehnică trasează o linie dreaptă. Chenarul imaginii mascate este definit de liniile desenate în soluție folosind ctx.lineTo(maskImg.width, 0).
stroke() De-a lungul căii desemnate, desenează granițele sau liniile. De exemplu, moveTo() și lineTo() sunt folosite pentru a defini forma măștii, iar apoi ctx.stroke() este folosit pentru a aplica chenarul în jurul imaginii mascate.
lineWidth Determină cât de groase sunt pictate liniile pe pânză. Scriptul stabilește un chenar gros de 5 pixeli în jurul formei măștii folosind ctx.lineWidth = 5.
strokeStyle Indică culoarea sau stilul chenarului. Culoarea chenarului din exemplu este setată la roșu folosind ctx.strokeStyle ='red'.

Recunoașterea modului de aplicare a unui chenar unei imagini mascate

Obiectivul scripturilor furnizate este de a folosi o altă imagine ca mască pentru o imagine și apoi de a folosi API-ul Canvas pentru a adăuga un chenar personalizat în jurul formei mascate. Două noi obiecte imagine sunt create la începutul funcției pentru mască și imaginea principală. Când încărcați fotografii din surse externe, setarea de origine încrucișată este esențială pentru a preveni problemele din cauza CORS. Se formează o pânză și proporțiile acesteia sunt ajustate pentru a se potrivi cu imaginea măștii odată ce ambele imagini au fost încărcate. Acest lucru evită problemele de redimensionare în timpul desenării imaginii și garantează că pânza este pregătită pentru lucru cu zona corespunzătoare.

Scriptul folosește apoi drawImage() funcția de a desena imaginea măștii pe pânză. Procedând astfel, masca este aplicată pe pânză, servind drept strat de bază pentru procedura de mascare. Operația globală compozită trebuie setată la „source-in” pentru a aplica corect masca. Pânza este instruită să rețină doar zonele din imaginea principală care coincid cu imaginea măștii. În esență, masca definește forma la care este decupată imaginea principală. Operația compozită este resetată la „sursă peste” atunci când imaginea principală este desenată în interiorul acestei zone de tăiere, permițând acțiuni suplimentare, cum ar fi pictura de chenar, fără a afecta conținutul decupat anterior.

Aplicarea unui chenar pe forma mascata presupune utilizarea accident vascular cerebral () tehnică. Calea sau forma specificată pe pânză este indicată de această comandă. În a doua soluție, moveTo() și lineTo() sunt combinate pentru a genera manual calea pânzei și a urmări marginile măștii. Cu ajutorul acestor tehnici, puteți specifica manual forma chenarului și vă asigurați că aceasta aderă la forma măștii, mai degrabă decât la limita pânzei dreptunghiulare. Aveți control complet asupra aspectului graniței, deoarece lineWidth proprietatea stabilește grosimea chenarului și strokeStyle proprietatea își stabilește culoarea.

În cele din urmă, funcția toDataURL() este folosită pentru a transforma pânza într-un șir Base64. Făcând acest lucru, imaginea finală – inclusiv masca și chenar – este transformată într-un format care este ușor de utilizat în alte zone ale programului sau încărcat pe un server. Pentru a evita greșelile de sincronizare, promisiunea se asigură că această operațiune se încheie numai când ambele imagini s-au încărcat complet. Aceste scripturi arată modul în care tehnicile sofisticate de modificare a imaginii, inclusiv mascarea și aplicarea unui chenar dinamic care se potrivește exact cu contururile măștii, pot fi realizate cu elementul de pânză JavaScript.

Metoda 1: Utilizarea metodei Canvas și Stroke pentru a adăuga o chenar personalizată unei imagini mascate

Pentru a construi o chenar în jurul imaginii mascate, această abordare folosește JavaScript și API-ul Canvas. Stroke() este folosit pentru a contura forma mascata.

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;
    });
}

Opțiunea 2: creați o chenar personalizată în jurul formei măștii folosind calea pânzei

Această metodă asigură că chenarul urmează îndeaproape forma mascata urmând calea măștii imaginii folosind API-ul Canvas cu 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;
    });
}

Îmbunătățirea imaginilor mascate cu chenaruri personalizate în JavaScript

Experiența utilizatorului aplicației dvs. JavaScript poate fi mult îmbunătățită prin capacitatea de a masca imagini și de a seta margini personalizate atunci când aveți de-a face cu API-ul Canvas. Cu ajutorul mascării, puteți decide care zone ale unei imagini sunt vizibile în funcție de o altă imagine, cunoscută sub numele de mască. Adăugarea unui chenar în jurul zonei mascate este o problemă pe care o întâmpină mulți dezvoltatori, în special atunci când masca nu are o formă dreptunghiulară simplă. Proiectele cu margini care se potrivesc exact cu conturul măștii vor părea mai lustruite și mai experte.

O soluție utilă la această problemă este utilizarea API-ului Canvas Calea 2D obiect. Puteți folosi Path2D pentru a proiecta trasee complicate care se potrivesc contururilor măștii dvs. și apoi să le înconjoare cu un chenar. Această metodă vă permite să generați chenare care se potrivesc exact cu colțurile măștii dvs. personalizate, depășind dreptunghiurile convenționale. Folosind moveTo() şi lineTo() împreună facilitează trasarea conturului măștii și garantează o chenar care este aliniată cu precizie.

Performanța este un alt factor important de luat în considerare, în special atunci când lucrați cu imagini mai mari sau când aplicați chenarele dinamic în timp real. Viteza aplicației dvs. poate fi îmbunătățită prin utilizarea unor strategii precum stocarea în cache a imaginii mascate, reducerea operațiunilor de desen și simplificarea procesului de randare a pânzei. Chiar și în setări complicate sau de înaltă performanță, puteți garanta că procedurile de mascare și de desenare a marginilor decurg fără probleme prin reducerea acțiunilor inutile.

Întrebări frecvente despre mascarea și marginea imaginilor folosind canvas

  1. În JavaScript, cum pot folosi o altă imagine pentru a masca una?
  2. Folosind 2 setat la 'source-in', desenați masca pe pânză pentru a masca o imagine folosind API-ul Canvas. Pentru a se potrivi cu masca, aceasta va decupa imaginea principală.
  3. Cum pot crea o chenar pentru o imagine mascata care se conformeaza formei acesteia?
  4. După stabilirea traseului măștii cu moveTo() şi lineTo(), utilizați stroke() tehnică. Acest lucru vă va permite să încercuiți forma măștii cu un chenar personalizat.
  5. Care este scopul toDataURL() în manipularea pânzei?
  6. Conținutul pânzei este transformat într-o imagine codificată în Base64 prin intermediul toDataURL() funcție, făcându-l simplu de utilizat sau distribuit ca imagine PNG.
  7. Cum pot optimiza operațiunile canvas pentru performanță?
  8. Reduceți cantitatea de operațiuni de desen și gândiți-vă la stocarea elementelor utilizate în mod obișnuit pentru a maximiza viteza pânzei. Astfel, aplicația dumneavoastră funcționează fără probleme și reduce numărul de redesenări.
  9. Pot încărca imagini cu origini încrucișate într-o pânză?
  10. Da, dar pentru a face imaginea disponibilă fără a cauza dificultăți CORS, trebuie să setați crossOrigin proprietate la 'anonymous'.

Gânduri finale despre mascare și granițe

În aplicațiile JavaScript, mascarea imaginilor și aplicarea de margini personalizate în pânză este o modalitate eficientă de a crea elemente vizuale lustruite. Dezvoltatorii au capacitatea de a manipula randarea și stilul imaginilor utilizând API-ul Canvas și comenzi sofisticate de desen, cum ar fi accident vascular cerebral () și definițiile căilor.

Performanța netedă este asigurată prin optimizarea cu atenție a operațiunilor de chenar și mascare, în special pentru fotografiile mai mari. Acest tutorial oferă o metodă utilă pentru pictarea dinamică a chenarelor în jurul imaginilor nedreptunghiulare, care este utilă atunci când dezvoltați aplicații online care sunt atât plăcute din punct de vedere estetic, cât și receptive.

Referințe pentru Tehnici de Mascare și Borduri în Canvas
  1. Ghid detaliat de utilizare API-ul Canvas pentru a manipula imagini și măști, inclusiv operațiuni de desen precum 4 şi 2: MDN Web Docs .
  2. Explicație cuprinzătoare despre cum să aplicați mascarea imaginii și gestionarea resurselor de origine încrucișată în JavaScript: Tutoriale HTML5 Canvas .
  3. Sfaturi de performanță pentru aplicațiile bazate pe pânză, concentrându-se pe optimizarea redării imaginii și a operațiunilor de desen: Revista Smashing .