英特尔XDK移动应用程序压缩到较小的图像

时间:2014-11-13 20:38:46

标签: android ajax base64 intel-xdk

所以我在移动应用程序中将图像发送到我自己创建的远程服务。默认情况下,我的手机拍摄的图像大约为5MB。然后我在base64中编码并将其发送到服务,它需要FOREVER。有什么方法可以检测到它有多大,并让一个较小的版本发送。有点像当你为一个文字拍照时它说“图片太大了。压缩......”我需要我的应用程序拍摄照片,如果它超过200KB压缩它。

1 个答案:

答案 0 :(得分:0)

当你说'#34;压缩它'#34;时,我假设你正在谈论缩减采样(减少像素数)而不是改变压缩算法。

在没有看到你的代码的情况下很难分辨,但是当你把它转换为base64时我假设你有一些对象(比如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();

当然,您需要确保画布的宽高比与图像的宽高比相匹配,这样才不会失真。