Top Related Projects
Generates an image from a DOM node using HTML5 canvas
✂️ Generates an image from a DOM node using HTML5 canvas and SVG.
Renders HTML into the browser's canvas
Native Linux App for UI and UX Design built in Vala and GTK
JavaScript API for Chrome and Firefox
Quick Overview
html2canvas is a JavaScript library that allows you to take "screenshots" of webpages or parts of webpages, directly on the client-side. It renders the HTML and CSS of a page into a canvas element, which can then be saved as an image. This library is particularly useful for creating thumbnails, capturing dynamic content, or generating images from HTML.
Pros
- Works entirely on the client-side, requiring no server-side processing
- Supports a wide range of HTML5 and CSS3 features
- Highly customizable with various options and settings
- Active development and community support
Cons
- May not perfectly render all CSS properties and complex layouts
- Performance can be slow for large or complex pages
- Some limitations with cross-origin content due to browser security restrictions
- Not suitable for capturing full-page screenshots of very long pages
Code Examples
- Basic usage:
html2canvas(document.body).then(canvas => {
document.body.appendChild(canvas);
});
This code captures the entire body of the page and appends the resulting canvas to the document.
- Capturing a specific element:
const element = document.getElementById('myElement');
html2canvas(element).then(canvas => {
const img = canvas.toDataURL('image/png');
window.open(img);
});
This example captures a specific element and opens the resulting image in a new window.
- Using options:
html2canvas(document.body, {
scale: 2,
logging: true,
useCORS: true
}).then(canvas => {
const img = document.createElement('img');
img.src = canvas.toDataURL();
document.body.appendChild(img);
});
This code captures the body with custom options: increased scale, enabled logging, and CORS image loading.
Getting Started
-
Install html2canvas via npm:
npm install html2canvas
-
Include the library in your project:
import html2canvas from 'html2canvas';
-
Use the library to capture an element:
const element = document.querySelector('#myElement'); html2canvas(element).then(canvas => { document.body.appendChild(canvas); });
This basic setup allows you to start using html2canvas in your project. Remember to handle any errors and adjust options as needed for your specific use case.
Competitor Comparisons
Generates an image from a DOM node using HTML5 canvas
Pros of dom-to-image
- Smaller file size and fewer dependencies
- Better support for SVG elements
- Faster rendering for simpler DOM structures
Cons of dom-to-image
- Less active development and maintenance
- Limited support for complex CSS properties
- May struggle with certain font rendering issues
Code Comparison
dom-to-image:
domtoimage.toPng(node)
.then(function (dataUrl) {
var img = new Image();
img.src = dataUrl;
document.body.appendChild(img);
})
.catch(function (error) {
console.error('oops, something went wrong!', error);
});
html2canvas:
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
Both libraries aim to convert HTML elements to images, but they differ in implementation and feature set. html2canvas offers more comprehensive support for complex web layouts and CSS properties, while dom-to-image provides a lighter alternative with better SVG handling. The choice between the two depends on the specific requirements of your project, such as the complexity of the DOM structure, performance needs, and the types of elements you need to capture.
✂️ Generates an image from a DOM node using HTML5 canvas and SVG.
Pros of html-to-image
- Supports a wider range of CSS properties and rendering scenarios
- Generally produces more accurate results for complex layouts
- Offers multiple output formats (PNG, JPEG, SVG)
Cons of html-to-image
- Slower rendering performance, especially for large or complex elements
- Less mature project with fewer contributors and updates
Code Comparison
html-to-image:
import { toPng } from 'html-to-image';
toPng(document.getElementById('my-node'))
.then(function (dataUrl) {
var img = new Image();
img.src = dataUrl;
document.body.appendChild(img);
});
html2canvas:
import html2canvas from 'html2canvas';
html2canvas(document.getElementById('my-node')).then(function(canvas) {
document.body.appendChild(canvas);
});
Both libraries aim to convert HTML elements to images, but html-to-image offers more flexibility in output formats and generally handles complex layouts better. However, html2canvas has been around longer, has a larger community, and typically performs faster. The code usage is similar, with html-to-image providing more specific functions for different output types, while html2canvas focuses primarily on canvas output. Choose based on your specific needs for accuracy, performance, and output format requirements.
Renders HTML into the browser's canvas
Pros of rasterizeHTML.js
- Better support for CSS features like pseudo-elements and media queries
- More accurate rendering of complex layouts and styles
- Ability to handle external resources and cross-origin content
Cons of rasterizeHTML.js
- Slower performance compared to html2canvas
- Requires a browser environment or headless browser to function
- Less active development and community support
Code Comparison
html2canvas:
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
rasterizeHTML.js:
rasterizeHTML.drawHTML('<div>Hello, World!</div>', canvas)
.then(function success(renderResult) {
// Use renderResult.image
}, function error(e) {
console.error(e);
});
Both libraries aim to render HTML content to canvas, but they differ in approach and capabilities. html2canvas focuses on client-side rendering and is generally faster, while rasterizeHTML.js offers more accurate rendering at the cost of performance. html2canvas has a larger community and more frequent updates, making it a popular choice for simpler use cases. rasterizeHTML.js, on the other hand, excels in scenarios where precise rendering of complex layouts and styles is crucial. The choice between the two depends on the specific requirements of your project, balancing between performance and rendering accuracy.
Native Linux App for UI and UX Design built in Vala and GTK
Pros of Akira
- Native desktop application for UI/UX design, offering a more comprehensive toolset
- Focused on vector graphics and UI prototyping, providing specialized features
- Built with Vala and GTK, potentially offering better performance on Linux systems
Cons of Akira
- Limited to desktop environments, lacking the web-based flexibility of html2canvas
- Smaller community and potentially slower development compared to html2canvas
- Steeper learning curve for users not familiar with desktop design applications
Code Comparison
While a direct code comparison is not relevant due to the different nature of these projects, we can highlight their primary use cases:
html2canvas (JavaScript):
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
Akira (Vala):
public class MainWindow : Gtk.ApplicationWindow {
public MainWindow (Gtk.Application app) {
Object (application: app);
}
}
html2canvas is primarily used for capturing web content as images, while Akira is a full-fledged design application with a more complex codebase and UI components.
JavaScript API for Chrome and Firefox
Pros of Puppeteer
- Full browser automation, allowing for more complex interactions and scenarios
- Supports JavaScript execution and dynamic content rendering
- Can capture full-page screenshots and generate PDFs
Cons of Puppeteer
- Heavier resource usage and slower execution compared to html2canvas
- Requires a separate browser instance, which may not be suitable for all environments
- More complex setup and configuration process
Code Comparison
html2canvas:
html2canvas(document.body).then(canvas => {
document.body.appendChild(canvas);
});
Puppeteer:
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'screenshot.png'});
await browser.close();
Key Differences
- html2canvas operates directly in the browser, while Puppeteer runs a separate browser instance
- html2canvas is focused on rendering HTML to canvas, while Puppeteer offers broader automation capabilities
- Puppeteer can interact with web pages, while html2canvas is limited to capturing the current state
- html2canvas is lighter and faster for simple screenshot tasks, but Puppeteer is more versatile for complex scenarios
Both tools have their strengths, and the choice depends on specific project requirements, performance needs, and the complexity of the tasks at hand.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
html2canvas
Homepage | Downloads | Questions
JavaScript HTML renderer
The script allows you to take "screenshots" of webpages or parts of it, directly on the users browser. The screenshot is based on the DOM and as such may not be 100% accurate to the real representation as it does not make an actual screenshot, but builds the screenshot based on the information available on the page.
How does it work?
The script renders the current page as a canvas image, by reading the DOM and the different styles applied to the elements.
It does not require any rendering from the server, as the whole image is created on the client's browser. However, as it is heavily dependent on the browser, this library is not suitable to be used in nodejs. It doesn't magically circumvent any browser content policy restrictions either, so rendering cross-origin content will require a proxy to get the content to the same origin.
The script is still in a very experimental state, so I don't recommend using it in a production environment nor start building applications with it yet, as there will be still major changes made.
Browser compatibility
The library should work fine on the following browsers (with Promise
polyfill):
- Firefox 3.5+
- Google Chrome
- Opera 12+
- IE9+
- Safari 6+
As each CSS property needs to be manually built to be supported, there are a number of properties that are not yet supported.
Usage
The html2canvas library utilizes Promise
s and expects them to be available in the global context. If you wish to
support older browsers that do not natively support Promise
s, please include a polyfill such as
es6-promise before including html2canvas
.
To render an element
with html2canvas, simply call:
html2canvas(element[, options]);
The function returns a Promise containing the <canvas>
element. Simply add a promise fulfillment handler to the promise using then
:
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
Building
You can download ready builds here.
Clone git repository:
$ git clone git://github.com/niklasvh/html2canvas.git
Install dependencies:
$ npm install
Build browser bundle
$ npm run build
Examples
For more information and examples, please visit the homepage or try the test console.
Contributing
If you wish to contribute to the project, please send the pull requests to the develop branch. Before submitting any changes, try and test that the changes work with all the support browsers. If some CSS property isn't supported or is incomplete, please create appropriate tests for it as well before submitting any code changes.
Top Related Projects
Generates an image from a DOM node using HTML5 canvas
✂️ Generates an image from a DOM node using HTML5 canvas and SVG.
Renders HTML into the browser's canvas
Native Linux App for UI and UX Design built in Vala and GTK
JavaScript API for Chrome and Firefox
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot