我在尝试使用与样本'How to build a location-based hybrid mobile app with reverse geocoding'中使用的代码类似的代码获取使用相机拍摄的图像的dataUrl时遇到问题。我正在使用Android 2.3.5在三星Galaxy S2上测试代码。
我用来获取dataUrl的代码是非常标准的javascript:
var toDataURL = function toDataURL(uri, callback)
{
forge.logging.log('toDataURL...');
forge.logging.log(uri);
var image = document.createElement('img');
image.src = uri;
image.onload = function ()
{
forge.logging.log('toDataURL image.onload...');
// create canvas
var canvas = document.createElement('canvas');
canvas.id = 'canvas';
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext('2d');
// draw image to canvas
context.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height);
// get data url
var dataUrl = canvas.toDataURL();
callback(dataUrl);
forge.logging.log('...toDataURL image.onload');
};
forge.logging.log('...toDataURL');
};
问题是canvas.toDataURL返回的dataUrl总是空的('data:,')。作为参数传递的uri记录为:
I / Forge(18019):[FORGE]'content://io.trigger.forgeb6367d6ee13011e1b9ed12313d1adcbe/file___height=640& type = image& uri = content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F44% 23Intent%3Bend&安培;宽度= 480&安培;名称=图片'
,它是通过参数:
调用forge.file.URL返回的D / Forge(18019):使用task.params本地调用“file.URL”:{“uri”:“content:// media / external / images / media / 45#Intent; end”,“name” : “图像”, “类型”: “图像”, “宽度”:480, “高度”:640}
据推测,这与权限有关。我的问题是,我需要做些什么来使代码工作?或者是否有另一种方法来获取相机拍摄的文件内容? (我的目的是将照片的内容发送到网络服务。)
答案 0 :(得分:2)
我会仔细查看代码以尝试在此处重新创建 - 感谢代码段 - 但与此同时可能会有一个更简单的解决方案。
如果您需要做的只是向用户显示图像然后将其上传到Web服务,您可以使用file.getImage,file.URL和request.ajax。从代码here和here拼凑而成:
forge.file.getImage({width: 300, height: 300}, function (file) {
// Get a URL to the returned file object which can be used from the local webview.
forge.file.URL(file, function (url) {
document.getElementById('img').src = url;
});
forge.request.ajax({
url: "http://example.com/file_upload",
files: [file]
});
});
这会对你有用吗?