>  기사  >  웹 프론트엔드  >  Node.js와 캔버스는 이미지 미리보기 압축 업로드를 구현합니다.

Node.js와 캔버스는 이미지 미리보기 압축 업로드를 구현합니다.

小云云
小云云원래의
2018-03-28 17:16:491389검색

이 글은 주로 js와 캔버스로 이미지 미리보기를 압축하고 업로드하는 방법을 공유하고, 예제 코드와 설명을 결합해 여러분께 도움이 되었으면 좋겠습니다.

1단계: 사용자가 업로드할 이미지를 선택합니다

<input type="file" accept="image/*" type="file"" name="imageFile" onchange="upload()">

이미지를 선택한 후 업로드 기능이 실행됩니다. 이 함수에서는 이미지의 리소스를 가져와 압축한 후 캔버스를 사용하여 그려야 합니다. 서버에 업로드해야 하는 경우 또는 ajax 또는 기타 방법을 사용하여 업로드할 수 있습니다.

2단계: 이미지 리소스 압축 미리보기 가져오기 및 업로드

function upload() {
	let file = document.querySelector(&#39;input[type=file]&#39;).files[0]  // 获取选择的文件,这里是图片类型
	let reader = new FileReader()
        reader.readAsDataURL(file) //读取文件并将文件以URL的形式保存在resulr属性中 base64格式
        reader.onload = function(e) { // 文件读取完成时触发 
            let result = e.target.result // base64格式图片地址 
            var image = new Image() image.src = result // 设置image的地址为base64的地址 
            image.onload = function(){ 
                var canvas = document.querySelector("#canvas"); 
                var context = canvas.getContext("2d"); 
                canvas.width = image.width; // 设置canvas的画布宽度为图片宽度 
                canvas.height = image.height; 
                context.drawImage(image, 0, 0, image.width, image.height) // 在canvas上绘制图片 
                let dataUrl = canvas.toDataURL(&#39;image/jpeg&#39;, 0.92) // 0.92为压缩比,可根据需要设置,设置过小会影响图片质量 
                                                                   // dataUrl 为压缩后的图片资源,可将其上传到服务器 
            } 
       }
 }

이제 이미지가 성공적으로 압축되었는지 비교해 보겠습니다.

원본 이미지 크기:
압축 비율이 0.92로 설정되었습니다.
압축 비율이 설정되었습니다. to 0.52

줌 비율을 0.92로 설정했을 때 이미지가 원본 이미지보다 커지는 것이 얼핏 이상하다고 생각하시나요? 실제로 이미지를 base64로 인코딩한 후에는 원본 이미지보다 크기가 커집니다. 구체적인 이유로 base64의 인코딩 원리를 확인할 수 있습니다. 이미지 압축에 성공한 것 같습니다!

참고: 캔버스는 IE9 이하에서 지원되지 않습니다. 큰 이미지에는 base64를 사용하지 마십시오. 응답 속도에 영향을 미치기 때문입니다.

관련 권장사항:

php는 서버에 파일을 업로드하고 이미지 미리보기를 구현합니다

위 내용은 Node.js와 캔버스는 이미지 미리보기 압축 업로드를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.