我正在开发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;
}
请建议。
答案 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.
});
}