1

我有一个简单的 android 应用程序使用myView.toImage()

正如预期的那样,这将返回一个 blob,太棒了!

然后我可以将此 blob 编码为 base64,并通过将解码后的字符串加载到应用程序中的测试解码来ImageView完美呈现图像。

但是在php中解码这个字符串时,base64字符串有两个问题:首先字符串长度并不总是4的倍数,即没有添加填充,其次当手动添加填充时,图像总是空白。

然而,在按钮对象上使用相同的代码可以完美地工作,这似乎只在使用toImage()Ti.View 对象上的方法时发生

工作代码(产生良好的 base64 字符串)

myButton.toImage(toImageComplete);

function toImageComplete(blob){
Ti.API.info("To image complete" + blob);

var sigBase64 = Ti.Utils.base64encode(blob); 
Ti.API.info(sigBase64);
}

非工作代码(产生错误的 base64 字符串),注意唯一的变化是调用 toImage 的对象现在是 Ti.UI.View 的实例,而不是 Ti.UI.Button

myView.toImage(toImageComplete);

function toImageComplete(blob){
Ti.API.info("To image complete" + blob);

var sigBase64 = Ti.Utils.base64encode(blob); 
Ti.API.info(sigBase64);
}

Appcelerator Studio 4.6 SDK 5.3.0GA 编译到安卓平板和Genymotion模拟器

4

1 回答 1

0

好的,所以尝试了 3 天,沮丧了 3 天,我终于有了解决方案。如果它可以帮助任何人避免浪费我浪费的时间:

这实际上一直在工作,但我使用 a 的输出 Ti.API.info()来查看生成的 base64 字符串。似乎Ti.API.info()截断了长字符串。当 base64 字符串保存到数据库并检索时,一切都按预期工作。

这个故事的寓意...不要Ti.API.info()用来记录长字符串,它们会被截断

于 2016-06-15T13:09:13.730 回答