js 순수한 전단 압축 이미지 구현
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> </title>
</head>
<body>
<input id='file' type="file">
<script>
var eleFile = document.querySelector('#file')
var file;
var render = new FileReader(), img = new Image();
render.onload = function(e) {
img.src = e.target.result
}
//
eleFile.addEventListener('change', function(e) {
file = e.target.files[0];
if(file.type.indexOf('image') === 0) {
// , URL Base64
render.readAsDataURL(file)
}
})
// canvas
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
img.onload = function() {
//
var originWidth = this.width;
var originHeight = this.height;
//
var maxWidth = 200, maxHeight = 200
//
var targetWidth = originWidth, targetHeight = originHeight;
// 200*200
if(originWidth > maxWidth || originHeight > maxHeight) {
if(originWidth / originHeight > maxWidth / maxHeight) {
//
targetWidth = maxWidth;
targetHeight = Math.round(maxWidth * (originHeight / originWidth))
}else {
targetHeight = maxHeight;
targetWidth = Math.round(maxHeight * (originWidth / originHeight))
}
}
//
canvas.width = targetWidth;
canvas.height = targetHeight;
//
context.clearRect(0,0,targetWidth, targetHeight)
//
context.drawImage(img, 0, 0, targetWidth, targetHeight);
//canvas blob
canvas.toBlob(function(blob) {
try {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {{
if(xhr.status == 200) {
}
}}
//
xhr.open('POST','upload.php', true);
xhr.send(blob)
} catch (error) {
console.log(error)
}
}, file.type || 'image/png')
//
var div1 = document.createElement('div')
div1.innerText = ' :'
document.body.appendChild(div1)
document.body.appendChild(img)
//canvas
var div2 = document.createElement('div')
div2.innerText = 'canvas :'
document.body.appendChild(div2)
document.body.appendChild(canvas)
}
</script>
</body>
</html>
분석: 원리는 canvas의 생성된 그림으로 그 크기를 조절하여 그림의 압축을 하는 것이다. 주의해야 할 것은 그림의 사이즈가 너무 작으면 그림이 모호해질 수 있으므로 사용할 때 그 비례 제어를 설정하는 것이다.1. FileReader를 통해 그림 파일을 읽고 이미지로 그림 URL을 설치합니다(미리보기용)
2. base64 문자열 모드로 전환
3. maxWidth, MaxHeight와 비례를 통해 최종 canvas의 넓이를 제어한다
4. 캔버스로 그림 그리기
5. canvas를 blob 파일로 출력하여 업로드
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.