js 순수한 전단 압축 이미지 구현

3339 단어 js그림 압축
본고의 실례는 여러분에게 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 파일로 출력하여 업로드
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기