압축 전:

압축 전:

 >  기사  >  웹 프론트엔드  >  캔버스를 사용하여 이미지를 압축하는 방법은 무엇입니까?

캔버스를 사용하여 이미지를 압축하는 방법은 무엇입니까?

零下一度
零下一度원래의
2017-06-24 14:31:591565검색

요즘 휴대폰으로 촬영한 사진의 크기는 수 메가바이트에 달하는 경우가 많습니다. 사용자가 휴대폰으로 사진을 업로드하면 이 문제를 해결하기 위해 많은 양의 데이터가 소모되고, 다른 하나는 업로드하는 데 오랜 시간이 걸립니다. 사진을 압축하는 데 필요함:

아이디어: 캔버스를 사용하여 사진을 다시 그리되 종횡비를 변경하지 않고 특정 너비와 높이는 특정 상황에 따라 달라집니다.

코드:

 html:

<input type="file" id="upload" /><p>压缩前:</p><img id="oldImg" src=""/><p>压缩后:</p><img id="newImg" src=""/>

 js:

var oldImg = document.getElementById("oldImg");var newImg = document.getElementById("newImg");//创建一个隐藏的canvasvar canvas = document.createElement("canvas");
canvas.id = "myCanvas";
canvas.style.display = "none";
document.body.appendChild(canvas);            
var cxt = canvas.getContext('2d');var upload = document.getElementById("upload");
upload.onchange = function(){//获取input file里面的图片路径,该路径为blob格式var url = getObjectURL(this.files[0]);
    oldImg.src = url;
    canvasImg.src = oldImg.src;
    canvasImg.onload = function(){//这是一个过渡的img,当这个img加载完成时绘制到canvas上面var m = oldImg.height/oldImg.width;
        canvas.width = 375;
        canvas.height = canvas.width*m;
        cxt.drawImage(canvasImg,0,0,canvas.width,canvas.height);//canvas绘制完成则转换为base64并传到新的图片上,再删除canvasvar Pic = document.getElementById("myCanvas").toDataURL("image/png");
        newImg.src = Pic;
        document.body.removeChild(canvas);}
}//建立一個可存取到該file的urlfunction getObjectURL(file) {var url = null;if(window.createObjectURL != undefined) { // basicurl = window.createObjectURL(file);
    } else if(window.URL != undefined) { // mozilla(firefox)url = window.URL.createObjectURL(file);
    } else if(window.webkitURL != undefined) { // webkit or chromeurl = window.webkitURL.createObjectURL(file);
    }return url;
}

렌더링:

렌더링은 컴퓨터에서 테스트되었으며 모바일 버전도 비슷합니다.

참고:

이 방법은 이미지를 base64 형식으로 변환하므로 프런트 엔드 페이지 코드가 매우 길고 불편해 보입니다. 방법은 이미지가 서버로 전송될 때까지 기다리는 것입니다. 그러면 압축된 이미지가 서버의 이미지 주소를 직접 표시합니다.

위 내용은 캔버스를 사용하여 이미지를 압축하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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