2014-11-13 3 views
0

그래서 내 모바일 응용 프로그램에서 내 자신의 생성 된 원격 서비스로 이미지를 보내고 있습니다. 기본적으로 내 휴대 전화는 그림이 약 5MB로 엄청나게 큰 이미지를 찍습니다. 그런 다음 base64로 인코딩하여 서비스에 전송하면 영원히 걸립니다. 이것이 얼마나 큰지를 탐지 할 수있는 방법이있을 수 있으며 더 작은 버전을 보낼 수 있습니다. 텍스트의 그림을 찍을 때와 같이 "그림이 너무 큽니다. 압축 중 ..."그림을 찍고 200KB가 넘으면 압축해야합니다.Intel XDK 모바일 응용 프로그램을 더 작은 이미지로 압축

답변

0

"압축합니다"라고 말하면 압축 알고리즘을 변경하는 대신 다운 샘플링 (픽셀 수를 줄이는)이라고 가정합니다.

:

, 당신은 그것의 크기, 즉를 확인 할 수 있어야한다 그것은 당신의 코드를 보지 않고 말할 어렵습니다,하지만 당신은 64 기수로 변환 할 때 난 당신이 어떤 객체 (말하는 dataURL)를 가지고 가정 여기에 설명 된대로

var x = <file converted to dataURL> 
if (x.length > MAX) { 
    <downsample image> 
} 

를 다운 샘플링하려면, 작은 해상도 캔버스 요소에 쓸 수 - Drawing an image from a data URL to a canvas을 :

var myCanvas = document.getElementById('my_canvas_id'); 
var ctx = myCanvas.getContext('2d'); 
var img = new Image; 
myCanvas.width=400; 
myCanvas.height=600; 
img.onload = function(){ 
    ctx.drawImage(img,0,0,400,600); // Or at whatever offset you like 
}; 
img.src = strDataURI; 

다음 dataURL에 결과 캔버스를 변환 :

var d = myCanvas.toDataURL(); 

물론 캔버스의 종횡비가 왜곡되지 않도록 이미지의 종횡비와 일치하는지 확인해야합니다.

관련 문제