在JQuery中将图像转换为base64string

时间:2016-02-13 21:44:42

标签: javascript jquery cordova visual-studio-cordova

我正在开发VS2015 cordova应用程序。我想将一个基本64字符串的图像发送到另一台服务器。当我从图库中获取图像并将其转换为base64string时,我遇到了问题。我成功地获得了base64string,但是当我取消它时,我总是得到黑色图像。这是我的代码:

   function onPhotoURISuccess(imageURI) {
     var largeImage = document.getElementById('smallImage');
    largeImage.style.display = 'block';
    largeImage.src = imageURI;
    basestrg = encodeImageUri(imageURI);

}

function getPhoto(source) {
           navigator.camera.getPicture(onPhotoURISuccess, onFail, {
        destinationType: Camera.DestinationType.NATIVE_URI, mediaType: Camera.MediaType.Photo,
        sourceType: source
    });
}
function encodeImageUri(imageUri) {
    var c = document.createElement('canvas');
    var ctx = c.getContext("2d");
    var img = new Image();
    img.onload = function () {
        c.width = this.width;
        c.height = this.height;
        ctx.drawImage(img, 0, 0);
    };
    img.src = imageUri;
    var dataURL = c.toDataURL("image/jpeg");
    return dataURL;
}

请建议。

2 个答案:

答案 0 :(得分:2)

这不在上下文中,但可能会对您有所帮助。 您可以直接从html5表单上传图像。

<form enctype="multipart/form-data" action="upload.php" method="post">    
    <input name="userImage" type="file" accept="image/*;capture=camera">    
    <button type="submit">Submit</button>
</form>

获取upload.php文件中的图像数据并另存为图像。在PHP中使用$_FILES数组,对于C#使用HttpContext来保存图像。
参考:Using form input to access camera and immediately upload photos using web app

答案 1 :(得分:0)

在您尝试获取数据网址时,您的图片尚未加载。

function encodeImageUri(imageUri, callback) {
    var c = document.createElement('canvas');
    var ctx = c.getContext("2d");
    var img = new Image();
    img.onload = function () {
        c.width = this.width;
        c.height = this.height;
        ctx.drawImage(img, 0, 0);
        var dataURL = c.toDataURL("image/jpeg");
        callback(dataURL);
    };
    img.src = imageUri;
}

然后更改另一个函数以传递回调

function onPhotoURISuccess(imageURI) {
    var largeImage = document.getElementById('smallImage');
    largeImage.style.display = 'block';
    largeImage.src = imageURI;
    encodeImageUri(imageURI, function(datauri){
      basestrg = datauri;
      //Now send the string to the server here.
    });

}