Titanium View.toImage()和base64编码并不总是正确解码

时间:2016-06-14 13:26:57

标签: android appcelerator appcelerator-titanium appcelerator-alloy appcelerator-studio

我使用myView.toImage()

创建一个简单的Android应用程序

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

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

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

然后在按钮对象上使用相同的代码可以很好地工作,这只会在Ti.View对象上使用toImage()方法时出现

工作代码(产生良好的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 编译为Android平板电脑和Genymotion模拟器

1 个答案:

答案 0 :(得分:0)

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

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

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