This JavaScript code snippet helps you to convert a png image to a jpg. This script sets up a file upload and image processing system. The script defines functions to create a new image box, process a file, process multiple files, and handle drag-and-drop events. It also sets up event listeners for the file selector input and the drag-and-drop area.
When a file is selected or dropped, the script processes the file by loading it into an image, converting it to a WebP ObjectURL, loading the image for display on the page, and injecting it into the DOM. The resulting image is displayed in a new image box that is added to a container.
How to Convert Png To Jpg in JavaScript
First of all, load the following assets into the head tag of your HTML document.
<link href='https://techly360.com/image-to-webp-converter-tool-script-for-blogger/' rel='canonical'/> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
Create the HTML structure for png to jpg converter as follows:
<div class="container"> <div class="layout"> <font class="hblack">Convert <font class="hred">Image</font> to <font class="hred">Webp</font> Format</font> <div> <input type="file" multiple accept="image/*"> </div> <div class="dropTarget"></div> <div id="previews"></div> </div> </div> </div>
Now, style the image convertor using the following CSS styles:
body { background-color: #e74c3c; margin: 0 auto; padding: 20px; font-family: Lato, Arial; } input[type=file] { margin: 20px 0; } img { max-height: 100%; max-width: 100%; box-shadow: 0px 0px 25px 0px rgba(0,0,0,0.75); } .dropTarget { position: relative; border: 3px dashed silver; flex-basis: auto; flex-grow: 20; height: 200px; } .dropTarget::before { content: 'Drop files here'; color: silver; font-size: 5vh; height: 45px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; text-align: center; pointer-events: none; user-select: none; } #previews > div { box-sizing: border-box; height: 240px; width: 240px; padding: 20px; display: inline-flex; justify-content: center; align-items: center; vertical-align: top; } #previews > div > progress { width: 80%; } .layout { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; align-content: stretch; border-radius: 7px; min-height: 300px; max-width: 800px; min-width: 340px; margin: 2% auto; padding: 15px; background-color: #FFFFFF; -webkit-box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.2); box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.2); } .hblack { display:block; text-align: center; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 20px; text-transform: uppercase; } .hred{ color: #EE4E44; }
Finally, add the following JavaScript function for converter functionality:
let refs = {}; refs.imagePreviews = document.querySelector('#previews'); refs.fileSelector = document.querySelector('input[type=file]'); function addImageBox(container) { let imageBox = document.createElement("div"); let progressBox = document.createElement("progress"); imageBox.appendChild(progressBox); container.appendChild(imageBox); return imageBox; } function processFile(file) { if (!file) { return; } console.log(file); let imageBox = addImageBox(refs.imagePreviews); // Load the data into an image new Promise(function (resolve, reject) { let rawImage = new Image(); rawImage.addEventListener("load", function () { resolve(rawImage); }); rawImage.src = URL.createObjectURL(file); }) .then(function (rawImage) { // Convert image to webp ObjectURL via a canvas blob return new Promise(function (resolve, reject) { let canvas = document.createElement('canvas'); let ctx = canvas.getContext("2d"); canvas.width = rawImage.width; canvas.height = rawImage.height; ctx.drawImage(rawImage, 0, 0); canvas.toBlob(function (blob) { resolve(URL.createObjectURL(blob)); }, "image/webp"); }); }) .then(function (imageURL) { // Load image for display on the page return new Promise(function (resolve, reject) { let scaledImg = new Image(); scaledImg.addEventListener("load", function () { resolve({imageURL, scaledImg}); }); scaledImg.setAttribute("src", imageURL); }); }) .then(function (data) { // Inject into the DOM let imageLink = document.createElement("a"); imageLink.setAttribute("href", data.imageURL); imageLink.setAttribute('download', `${file.name}.webp`); imageLink.appendChild(data.scaledImg); imageBox.innerHTML = ""; imageBox.appendChild(imageLink); }); } function processFiles(files) { for (let file of files) { processFile(file); } } function fileSelectorChanged() { processFiles(refs.fileSelector.files); refs.fileSelector.value = ""; } refs.fileSelector.addEventListener("change", fileSelectorChanged); // Set up Drag and Drop function dragenter(e) { e.stopPropagation(); e.preventDefault(); } function dragover(e) { e.stopPropagation(); e.preventDefault(); } function drop(callback, e) { e.stopPropagation(); e.preventDefault(); callback(e.dataTransfer.files); } function setDragDrop(area, callback) { area.addEventListener("dragenter", dragenter, false); area.addEventListener("dragover", dragover, false); area.addEventListener("drop", function (e) { drop(callback, e); }, false); } setDragDrop(document.documentElement, processFiles);
That’s all! hopefully, you have successfully integrated the JavaScript code for the image converter. If you have any questions or suggestions, feel free to comment below.