Cara Menggunakan Kanvas JavaScript untuk Menambah Sempadan Tersuai pada Imej Bertopeng

Masked images

Menguasai Sempadan Imej Bertopeng dalam Kanvas JavaScript

Gabungan berbilang gambar ialah langkah biasa dalam penciptaan kesan visual JavaScript. Menentukan kawasan yang boleh dilihat bagi imej dengan topeng adalah teknik yang kerap dilakukan. Walaupun ini berguna untuk mencipta bentuk unik, ia boleh mencabar untuk menambah sempadan di sekeliling bentuk bertopeng tersebut. Walaupun elemen dalam JavaScript menawarkan manipulasi imej yang meluas, bukan mudah untuk melaraskan sempadan di sekeliling imej yang telah bertopeng.

Pembangun boleh menggunakan topeng dan klip gambar dengan cara yang imaginatif dengan , walaupun secara lalai, mana-mana sempadan yang dijana cenderung sepadan dengan bentuk segi empat tepat kanvas. Apabila anda ingin membuat sempadan yang sepadan dengan tepi bentuk rumit yang ditakrifkan oleh topeng, ini menimbulkan masalah. Objektifnya adalah untuk mengikuti perjalanan tepat topeng melepasi sempadan segi empat tepat yang lurus.

Siaran ini akan menerangkan cara menggunakan topeng imej dalam JavaScript dan, lebih penting lagi, cara memastikan bahawa bentuk berbeza gambar bertopeng itu dikelilingi oleh sempadan. Selain itu, kami akan menyemak fungsi yang melengkapkan penyamaran tetapi belum mempunyai penyelesaian sempadan yang ditentukan.

Anda boleh memperhalusi penampilan sempadan dengan mempelajari cara bekerja dengan operasi komposit dalam kanvas. Mari kita mulakan dan lihat cara menggunakan ciri kanvas JavaScript untuk menambah sempadan yang diperlukan di sekeliling imej bertopeng.

Perintah Contoh penggunaan
globalCompositeOperation Komposisi tindakan lukisan pada kanvas ditakrifkan oleh ciri ini. GlobalCompositeOperation ='source-in' dalam contoh memastikan imej topeng menjepit gambar utama supaya hanya kawasan yang bersilang dilihat.
toDataURL() Mengubah maklumat kanvas ke dalam imej yang dikodkan dengan Base64. Ini memungkinkan untuk menggunakan imej siap sebagai PNG selepas menggunakan topeng dan sempadan. Output imej contoh dihasilkan menggunakan kanvas.todataurl ('imej/png').
crossOrigin Ciri ini menghormati sekatan keselamatan dengan mendayakan penggunaan gambar yang dimuatkan daripada domain lain dalam kanvas. MaskImg.crossOrigin = 'tanpa nama' menjamin bahawa akses kepada imej topeng boleh dibuat tanpa menyebabkan masalah CORS.
beginPath() Di atas kanvas, laluan baharu boleh dimulakan menggunakan kaedah ini. Kaedah kedua memanggil ctx.beginPath() untuk memastikan laluan itu mematuhi kontur topeng kerana ia melukis sempadan tersuai di sekeliling imej bertopeng.
moveTo() Dengan prosedur ini, tiada lukisan dibuat; sebaliknya, "pen" dialihkan ke tempat permulaan yang baharu. Titik permulaan sempadan diletakkan dalam contoh menggunakan ctx.moveTo(0, 0), yang penting untuk melukis sempadan dengan tepat di sekeliling sempadan topeng.
lineTo() Menggunakan koordinat yang diberikan sebagai titik permulaan, teknik ini melukis garis lurus. Sempadan imej bertopeng ditakrifkan oleh garisan yang dilukis dalam penyelesaian menggunakan ctx.lineTo(maskImg.width, 0).
stroke() Di sepanjang laluan yang ditetapkan, lukis sempadan atau garisan. Sebagai contoh, moveTo() dan lineTo() digunakan untuk mentakrifkan bentuk topeng, dan kemudian ctx.stroke() digunakan untuk menggunakan sempadan di sekeliling imej bertopeng.
lineWidth Menentukan ketebalan garisan yang dilukis pada kanvas. Skrip menetapkan sempadan tebal 5 piksel di sekeliling bentuk topeng menggunakan ctx.lineWidth = 5.
strokeStyle Menunjukkan warna atau gaya sempadan. Warna sempadan dalam contoh ditetapkan kepada merah dengan menggunakan ctx.strokeStyle ='red'.

Menyedari Cara Memohon Sempadan pada Imej Bertopeng

Objektif skrip yang disediakan adalah untuk menggunakan gambar lain sebagai topeng untuk satu imej, dan kemudian menggunakan untuk menambah jidar tersuai di sekeliling bentuk bertopeng. Dua objek imej baharu dicipta pada permulaan fungsi untuk topeng dan imej utama. Apabila memuatkan foto daripada sumber luaran, tetapan silang asal adalah penting untuk mengelakkan isu yang disebabkan oleh CORS. Kanvas terbentuk dan perkadarannya dilaraskan agar sepadan dengan imej topeng setelah kedua-dua imej dimuatkan. Ini mengelakkan saiz semula masalah semasa lukisan imej dan menjamin bahawa kanvas disediakan untuk bekerja dengan kawasan yang sesuai.

Skrip kemudian menggunakan berfungsi untuk melukis imej topeng ke atas kanvas. Dengan berbuat demikian, topeng digunakan pada kanvas, berfungsi sebagai lapisan asas untuk prosedur pelekat. Operasi komposit global mesti ditetapkan kepada "sumber masuk" untuk menggunakan topeng dengan betul. Kanvas diarahkan untuk mengekalkan hanya kawasan gambar utama yang bertepatan dengan imej topeng. Pada dasarnya, topeng mentakrifkan bentuk yang mana imej utama dipotong. Operasi komposit ditetapkan semula kepada "over source" apabila gambar utama dilukis di dalam kawasan keratan ini, membolehkan tindakan tambahan seperti mengecat sempadan tanpa menjejaskan kandungan yang dipotong sebelum ini.

Menerapkan sempadan pada bentuk bertopeng melibatkan penggunaan teknik. Laluan atau borang yang ditentukan pada kanvas ditunjukkan oleh arahan ini. Dalam penyelesaian kedua, moveTo() dan lineTo() digabungkan untuk menjana laluan kanvas secara manual dan mengesan sempadan topeng. Dengan menggunakan teknik ini, anda boleh menentukan secara manual bentuk sempadan dan memastikan ia mematuhi bentuk topeng dan bukannya sempadan kanvas segi empat tepat. Anda mempunyai kawalan penuh ke atas penampilan sempadan kerana harta menetapkan ketebalan sempadan dan harta menetapkan warnanya.

Akhir sekali, fungsi toDataURL() digunakan untuk mengubah kanvas menjadi rentetan Base64. Dengan melakukan ini, imej yang telah siap—termasuk topeng dan jidar—diubah menjadi format yang mudah digunakan di kawasan lain program atau dimuat naik ke pelayan. Untuk mengelakkan kesilapan masa, janji memastikan bahawa operasi ini hanya tamat apabila kedua-dua gambar telah dimuatkan sepenuhnya. Skrip ini menunjukkan bagaimana teknik pengubahsuaian imej yang canggih, termasuk menutup dan menggunakan sempadan dinamik yang tepat padan dengan kontur topeng, boleh dicapai dengan elemen kanvas JavaScript.

Kaedah 1: Menggunakan Kaedah Kanvas dan Strok untuk Menambah Sempadan Tersuai pada Imej Bertopeng

Untuk membina sempadan di sekeliling imej bertopeng, pendekatan ini menggunakan JavaScript dan API Kanvas. Stroke() digunakan untuk menggariskan bentuk bertopeng.

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

Pilihan 2: Buat Sempadan Tersuai Sekitar Bentuk Topeng Menggunakan Laluan Kanvas

Kaedah ini memastikan bahawa sempadan mengikut bentuk bertopeng dengan mengikuti laluan topeng imej menggunakan API Kanvas dengan 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;
    });
}

Mempertingkatkan Imej Bertopeng dengan Sempadan Tersuai dalam JavaScript

Pengalaman pengguna aplikasi JavaScript anda boleh dipertingkatkan dengan banyaknya dengan keupayaan untuk menutup imej dan menetapkan sempadan tersuai apabila berurusan dengan . Dengan bantuan pelekat, anda boleh menentukan kawasan imej yang boleh dilihat bergantung pada imej lain, yang dikenali sebagai topeng. Menambah sempadan di sekeliling zon bertopeng ialah isu yang dihadapi oleh ramai pembangun, terutamanya apabila topeng itu bukan bentuk segi empat tepat. Projek dengan sempadan yang tepat padan dengan garis besar topeng akan kelihatan lebih berkilat dan pakar.

Penyelesaian yang berguna untuk masalah ini ialah menggunakan API Kanvas objek. Anda boleh menggunakan Path2D untuk mereka bentuk laluan rumit yang sesuai dengan kontur topeng anda dan kemudian mengelilinginya dengan sempadan. Kaedah ini membolehkan anda menjana sempadan yang sepadan dengan tepat pada sudut topeng tersuai anda, melangkaui segi empat tepat konvensional. menggunakan dan bersama-sama menjadikannya lebih mudah untuk mengesan garis besar topeng dan menjamin sempadan yang dijajarkan dengan tepat.

Prestasi ialah satu lagi faktor penting yang perlu diambil kira, terutamanya apabila bekerja dengan imej yang lebih besar atau menggunakan sempadan secara dinamik dalam masa nyata. Kelajuan aplikasi anda boleh dipertingkatkan dengan menggunakan strategi seperti menyimpan gambar bertopeng, mengurangkan operasi lukisan dan memperkemas proses pemaparan kanvas. Walaupun dalam tetapan yang rumit atau berprestasi tinggi, anda boleh menjamin bahawa prosedur pelekat dan lukisan sempadan berjalan lancar dengan mengurangkan tindakan sia-sia.

  1. Dalam JavaScript, bagaimana saya boleh menggunakan imej lain untuk menutup satu?
  2. menggunakan ditetapkan kepada , lukis topeng pada kanvas untuk menutup imej menggunakan . Untuk memadankan topeng, ini akan memangkas imej utama.
  3. Bagaimanakah saya boleh membuat sempadan pada imej bertopeng yang mematuhi bentuknya?
  4. Selepas mewujudkan laluan topeng dengan dan , gunakan teknik. Ini akan membolehkan anda mengelilingi bentuk topeng dengan sempadan yang diperibadikan.
  5. Apakah tujuan dalam manipulasi kanvas?
  6. Kandungan kanvas diubah menjadi imej berkod Base64 melalui berfungsi, menjadikannya mudah untuk digunakan atau diedarkan sebagai imej PNG.
  7. Bagaimanakah saya boleh mengoptimumkan operasi kanvas untuk prestasi?
  8. Kurangkan jumlah operasi lukisan dan fikirkan tentang menyimpan elemen yang biasa digunakan untuk memaksimumkan kelajuan kanvas. Ini memastikan aplikasi anda berfungsi dengan lancar dan mengurangkan bilangan lukisan semula.
  9. Bolehkah saya memuatkan imej silang asal dalam kanvas?
  10. Ya, tetapi untuk menjadikan imej tersedia tanpa menyebabkan kesukaran CORS, anda perlu menetapkan harta kepada .

Dalam apl JavaScript, menutup imej dan menggunakan sempadan tersuai dalam kanvas ialah cara yang berkesan untuk mencipta elemen visual yang digilap. Pembangun mempunyai keupayaan untuk memanipulasi rendering dan penggayaan gambar dengan menggunakan dan arahan lukisan yang canggih seperti dan definisi laluan.

Prestasi lancar dipastikan dengan mengoptimumkan operasi sempadan dan penutupan dengan teliti, terutamanya untuk foto yang lebih besar. Tutorial ini menyediakan kaedah berguna untuk mengecat sempadan secara dinamik di sekeliling imej bukan segi empat tepat, yang berguna apabila membangunkan apl dalam talian yang menyenangkan dan responsif dari segi estetik.

  1. Panduan terperinci menggunakan untuk memanipulasi imej dan topeng, termasuk operasi lukisan seperti dan : Dokumen Web MDN .
  2. Penjelasan menyeluruh tentang cara menggunakan pelekat imej dan pengendalian sumber silang asal dalam JavaScript: Tutorial Kanvas HTML5 .
  3. Petua prestasi untuk aplikasi berasaskan kanvas, memfokuskan pada mengoptimumkan pemaparan imej dan operasi lukisan: Majalah Menghancurkan .