-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscript.js
59 lines (48 loc) · 1.92 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const uploadBox = document.querySelector(".upload-box"),
previewImg = uploadBox.querySelector("img"),
fileInput = uploadBox.querySelector("input"),
widthInput = document.querySelector(".width input"),
heightInput = document.querySelector(".height input"),
ratioInput = document.querySelector(".ratio input"),
qualityInput = document.querySelector(".quality input"),
downloadBtn = document.querySelector(".download-btn");
let ogImageRatio;
const loadFile = (e) => {
const file = e.target.files[0];
if (!file) return;
previewImg.src = URL.createObjectURL(file);
previewImg.addEventListener("load", () => {
widthInput.value = previewImg.naturalWidth;
heightInput.value = previewImg.naturalHeight;
ogImageRatio = previewImg.naturalWidth / previewImg.naturalHeight; // Corrected assignment
});
};
widthInput.addEventListener("input", () => {
// Changed from 'keyup' to 'input' for real-time updating
const height = ratioInput.checked
? widthInput.value / ogImageRatio
: heightInput.value;
heightInput.value = Math.floor(height);
});
heightInput.addEventListener("input", () => {
// Changed from 'keyup' to 'input' for real-time updating
const width = ratioInput.checked
? heightInput.value * ogImageRatio
: widthInput.value;
widthInput.value = Math.floor(width);
});
const resizeAndDownload = () => {
const canvas = document.createElement("canvas");
const a = document.createElement("a");
const ctx = canvas.getContext("2d");
const imgQuality = qualityInput.checked ? 0.5 : 1.0;
canvas.width = widthInput.value;
canvas.height = heightInput.value;
ctx.drawImage(previewImg, 0, 0, canvas.width, canvas.height);
a.href = canvas.toDataURL("image/jpeg", imgQuality);
a.download = new Date().getTime();
a.click();
};
downloadBtn.addEventListener("click", resizeAndDownload);
fileInput.addEventListener("change", loadFile);
uploadBox.addEventListener("click", () => fileInput.click());