Jos haluat ottaa kuvakaappauksen osasta tai kokonaan verkkosivustasi JavaScriptin avulla, saatat juuttua. Kuvan luominen HTML-elementistä voi tuntua haasteelta, koska JavaScriptissä ei ole suoraa tapaa tehdä sitä.
Onneksi tämä ei ole mahdoton tehtävä, ja se on itse asiassa melko helppoa oikeilla työkaluilla. Html-kuvakirjastoa käyttämällä kuvien tekeminen DOM-solmuista on yhtä yksinkertaista kuin yksi funktiokutsu.
Miten html-kuvaksi toimii?
The html-kuvaksi kirjasto tuottaa kuvan base64-tieto-URL-osoitteen muodossa. Se tukee useita tulostusmuotoja, mukaan lukien PNG, JPG ja SVG. Tämän muunnoksen suorittamiseen kirjasto käyttää tätä algoritmia:
- Luo klooni kohde-HTML-elementistä, sen lapsista ja kaikista liitetyistä pseudoelementeistä.
- Kopioi tyyli kaikille kloonatuille elementeille ja upota muotoilu riviin.
- Upota asiaankuuluvat verkkokirjasimet, jos sellaisia on.
- Upota mahdolliset kuvat.
- Muunna kloonattu solmu XML: ksi ja sitten SVG: ksi.
- Käytä SVG: tä tietojen URL-osoitteen luomiseen.
Varoitukset ja rajoitukset
Vaikka html-to-image on loistava kirjasto, se ei ole täydellinen. Siinä on muutamia varoituksia, nimittäin:
- Kirjasto ei toimi Internet Explorerissa tai Safarissa.
- Jos HTML-koodi, jota yrität muuntaa, sisältää pilaantuneen canvas-elementin, kirjasto epäonnistuu. Kuten MDN ei-CORS-hyväksyttyjen tietojen lisääminen canvas-elementtiin saastuttaa sen.
- Koska selaimet rajoittavat datan URL-osoitteen enimmäiskokoa, kirjaston muunnettavissa olevan HTML-koodin kokoa on rajoitettu.
Kirjaston käyttäminen
Jos haluat kokeilla kirjastoa, sinun on ensin luotava projektihakemisto paikalliselle koneellesi. Asenna seuraavaksi html-to-image kyseiseen hakemistoon käyttämällä npm-pakettien hallinta. Tässä on terminaalikomento sen asentamiseksi:
npm Asentaa--tallenna html-kuvaan
Sinun tulisi myös asentaa JavaScript-niputtaja, jotta kirjaston käyttö olisi hieman helpompaa. The rakentaa bundler voi auttaa pakkaamaan solmumoduulit web-yhteensopiviin komentosarjoihin.
npm Asentaa rakentaa
Siinä on kaikki mitä tarvitset asentamiseen. Luo seuraavaksi tiedosto nimeltä index.html hakemistossasi ja toimita se valitsemasi verkkopalvelimen kanssa. Laita seuraava koodi index.html: ään:
<!doctype html>
<html lang="fi">
<pää>
<meta charset="UTF-8">
<metanimi="näkymä"
sisältö="leveys = laitteen leveys, käyttäjän skaalattava = ei, aloitusskaala = 1,0, maksimimittakaava = 1,0, pienin mittakaava = 1,0">
<meta http-equiv="X-UA-yhteensopiva" sisältö="eli = reuna">
<otsikko>Asiakirja</title>
<tyyli>
.colorful-div {
pehmuste: 3rem;
väri valkoinen;
background-image: lineaarinen gradientti (oikealle, keltainen, rebeccapurple);
reuna: 1px tasainen musta;
marginaali: 1rem auto;
fontin koko: 3rem;
font-family: kursiivinen;
}
</style>
</head>
<kehon>
<div class="värikäs-div">
minä'tulen olemaan kuvakaappauksessa!
</div>
<div class="pitkä teksti">
minä'm esimerkki riittävän monisanaisesta kappaleesta
osoittaa, että kuvakaappausten ottaminen JavaScriptillä on
todella helppoa seuraavista syistä:
<ul>
<li>Syy 1</li>
<li>Syy 2</li>
<li>Syy 2</li>
</ul>
</div>
<komentosarja src="out.js"></script>
</body>
</html>
Tämä koodi luo kaksi elementtiä sivulle: div, jossa on kaltevuustausta, ja jonkin verran tekstiä ja järjestämättömän luettelon toisen div-elementin sisään. Seuraavaksi kirjoitat JavaScript, joka muuntaa nämä elementit kuviksi. Laita seuraava koodi uuteen tiedostoon nimeltä script.js:
tuonti * kuten htmlToImage alkaen "html-kuvaksi";
const elems = ['.colorful-div', '.pitkä teksti']
elements.jokaiselle((elem, ind) => {
konst solmu = asiakirja.querySelector (elem)
htmlToImage.toPng(solmu)
.sitten(toiminto (dataUrl) {
päästää img = Uusi Kuva();
img.src = dataUrl;
asiakirja.body.appendChild(img);
})
.ottaa kiinni(toiminto(virhe){
console.error('Hups! Jotain meni pieleen!');
konsoli.log (virhe)
});
})
Tämä koodi tekee muutamia asioita:
- Tuo html-kuvakirjaston.
- Luo CSS-valitsimista koostuvan taulukon, joka kohdistaa kahteen elementtiin.
- Luo PNG-kuvan data-URL-osoitteen muodossa taulukon jokaisesta elementistä.
- Luo img-tunnisteen ja asettaa sen src-attribuutin datan URL-osoitteeseen luoden kuvakopiot kahdesta elementistä.
Käytä nyt esbuildia luomaan niputettu tiedosto (out.js), jotka index.html viittaavat suorittamalla seuraavat komennot päätteessäsi:
./node_modules/.bin/esbuild script.js --bundle --outfile=out.js
Tässä vaiheessa tältä index.html: n pitäisi näyttää selaimessasi:
Vaikka kopiot näyttävät täsmälleen samalta kuin alkuperäiset, ne ovat itse asiassa kuvaelementtejä. Voit vahvistaa tämän käyttämällä avaamalla kehitystyökalusi ja tarkastaa ne.
Tämä kirjasto toimii myös JavaScript-kehysten kanssa. The html-kuvaksi -dokumentaatio sisältää ohjeet muiden kuvamuotojen luomiseen. Se sisältää myös esimerkin, joka näyttää kuinka kirjastoa käytetään Reactin kanssa.
Kuvakaappausten ottaminen JavaScriptillä on helppoa
Ei ole natiivi JavaScript-menetelmää kuvien luomiseen HTML-elementeistä tai kuvakaappausten ottamiseksi DOM: sta. Kuitenkin kirjastojen ja palveluiden, kuten html-to-image, avulla siitä tulee helppo tehtävä.
On muitakin tapoja saavuttaa samanlaisia tuloksia, kuten wkhtmltoimage-kirjasto. Voit käyttää tätä avoimen lähdekoodin työkalua ottaaksesi kuvakaappauksia koko verkkosivusta.