Home >Web Front-end >CSS Tutorial >How to Achieve High-Quality Image Downscaling in the Browser Using HTML5 Canvas?
Downsize (downsample) images in the browser for high quality
Reduxrespot:
In the browser When shrinking the image using the html5 canvas element, I found that the image quality is very low. After some research, I found that disabling interpolation in
Best Practices
Single-step downsampling
Recommended for situations where you need to downsize a large image to a small image Use single-step downsampling. Here are the steps:
Achieved with the following code example:
const originalImage = new Image(); originalImage.onload = () => { const originalCanvas = document.createElement('canvas'); originalCanvas.width = desiredWidth; originalCanvas.height = desiredHeight; const originalCtx = originalCanvas.getContext('2d'); originalCtx.drawImage(originalImage, 0, 0, desiredWidth, desiredHeight); const scaledData = originalCtx.getImageData(0, 0, desiredWidth, desiredHeight); const scaledCanvas = document.createElement('canvas'); scaledCanvas.width = desiredWidth; scaledCanvas.height = desiredHeight; const scaledCtx = scaledCanvas.getContext('2d'); scaledCtx.putImageData(scaledData, 0, 0); };
Multi-step downsampling
If single-step downsampling is not enough quality, you can use multi-step downsampling. This is achieved by repeatedly performing single-step downsampling using smaller ratios.
The following is a code example for two-step downsampling:
const originalImage = new Image(); originalImage.onload = () => { // 第一步:缩小 50% const firstCanvas = document.createElement('canvas'); firstCanvas.width = originalImage.width / 2; firstCanvas.height = originalImage.height / 2; const firstCtx = firstCanvas.getContext('2d'); firstCtx.drawImage(originalImage, 0, 0, firstCanvas.width, firstCanvas.height); // 第二步:缩小 50% const secondCanvas = document.createElement('canvas'); secondCanvas.width = firstCanvas.width / 2; secondCanvas.height = firstCanvas.height / 2; const secondCtx = secondCanvas.getContext('2d'); secondCtx.drawImage(firstCanvas, 0, 0, secondCanvas.width, secondCanvas.height); const finalImage = new Image(); finalImage.src = secondCanvas.toDataURL(); };
Blur issue
Multi-step downsampling may cause image blur. To solve this problem, the following techniques can be used:
The above is the detailed content of How to Achieve High-Quality Image Downscaling in the Browser Using HTML5 Canvas?. For more information, please follow other related articles on the PHP Chinese website!