js 압축 그림 의 예제(부피 만 줄 이 고 그림 크기 는 변경 하지 않 음)
링크
1.상황 전시
위의 그림 에서 보 듯 이 사진 업로드 버튼 을 누 르 면 휴대 전화 카메라 촬영 기능 을 호출 한다.
우 리 는 현재 휴대 전화 사진 이 10MB 정도 되 고 부피 가 너무 크다 는 것 을 알 고 있다.서버 에 올 리 기 전에 그림 의 크기 만 줄 이 고 그림 의 사 이 즈 를 바 꾸 지 않 을 수 있 을 까?
2.원인 분석
canvas 를 통 해 그림 을 다시 그립 니 다.
코드 표시:
/**
*
* @explain canvas (canvas2DataURL)
* @param base64Url base64
* @param imgAttr 、 、
* @param callback ,
* @returns
*/
function photoCompress (base64Url, imgAttr, callback){
var img = new Image();
img.src = base64Url;
img.onload = function(){
var that = this;
//
var w = that.width,
h = that.height,
//
scale = w / h;
w = imgAttr.width || w;
h = imgAttr.height || (w / scale);
// 0.7
var quality = 0.7;
// canvas
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
//
var anw = document.createAttribute("width");
anw.nodeValue = w;
canvas.setAttributeNode(anw);
var anh = document.createAttribute("height");
anh.nodeValue = h;
canvas.setAttributeNode(anh);
ctx.drawImage(that, 0, 0, w, h);
// (0-1)
if(imgAttr.quality && imgAttr.quality <= 1 && imgAttr.quality > 0){
quality = imgAttr.quality;
}
//
var imgType = imgAttr.type || 'image/jpeg';
// quality ,
var base64 = canvas.toDataURL(imgType, quality);
// base64
callback(base64);
};
}
그림 의 질,그림 의 너비,높이 를 사용자 정의 로 설정 할 수 있 습 니 다(imgAttr 설정 을 통 해). 3.전체 예시
// js
var fileObj = document.getElementById("file").files[0];
if (null == fileObj) {
alert(" , !");
}
//
var reader = new FileReader();
// base64(Blob File )
reader.readAsDataURL(fileObj);
// <=1MB,size :B(1Mb=1B*1024*1024)
if(fileObj.size/1024 <= 1024) {
reader.onload = function(e) {
// base64
var imgBase64 = e.target.result;
// base64
//
$.post(baseUrl + "/weixin/facein/upImg2.do",{imgBase64:imgBase64},function(resData){
// TODO
});
};
} else {
//
reader.onload = function(){
// base64Url
var fileBase64 = this.result;
//
var imgAttr = {quality : 0.2, type : 'img/jpeg'};
//
var callBack = function (base64Codes) {
//
//
};
//
photoCompress(fileBase64,imgAttr,callBack);
};
}
설명:전단 에서 그림 을 다시 그 리 는 것 은 브 라 우 저 에 대한 요구 가 있 습 니 다.제 가 테스트 할 때 컴퓨터 쪽 에 문제 가 없 지만 위 챗 에서 사용 할 때 매우 힘 들 고 위 챗 의 qq 브 라 우 저 커 널 을 무 너 뜨 려 서 사용 할 수 없습니다.
안 됩 니 다.전단 에서 압축 하 겠 다 는 생각 을 버 리 고 그림 을 스 트림 으로 백 스테이지 에 제출 합 니 다https://www.cnblogs.com/Marydon20170307/p/11486511.html
보충:
그림 최적화 에 있어 서 다음 과 같은 몇 가지 측면 에서 시작 할 수 있 습 니 다.해상도 감소>압축 그림>chrome 은 webp 형식 을 사용 합 니 다.
마지막 에 쓰다
어떤 사내 가 글 에 오류 가 있 거나 더 많은 내용 을 보충 해 야 한 다 는 것 을 발견 하면 댓 글 을 환영 합 니 다!!
이상 은 js 압축 이미지 의 예제(부피 만 줄 이 고 그림 사 이 즈 를 바 꾸 지 않 음)의 상세 한 내용 입 니 다.js 압축 이미지 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.