Titanium View.toImage() 和 base64 编码并不总是正确解码
Titanium View.toImage() and base64 encode not always decoding properly
我有一个简单的 android 应用程序,仅使用 myView.toImage()
如预期的那样返回一个 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 模拟器
好的,经过 3 天的尝试,3 天的挫折,我终于找到了解决方案。如果它能帮助任何人避免浪费我浪费的时间:
这实际上一直有效,但我使用 Ti.API.info()
的输出来查看生成的 base64 字符串。 Ti.API.info()
似乎截断了长字符串。当 base64 字符串被保存到数据库并检索时,所有工作都按预期进行。
这个故事的寓意...不要使用 Ti.API.info()
记录长字符串,它们将被截断
我有一个简单的 android 应用程序,仅使用 myView.toImage()
如预期的那样返回一个 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 模拟器
好的,经过 3 天的尝试,3 天的挫折,我终于找到了解决方案。如果它能帮助任何人避免浪费我浪费的时间:
这实际上一直有效,但我使用 Ti.API.info()
的输出来查看生成的 base64 字符串。 Ti.API.info()
似乎截断了长字符串。当 base64 字符串被保存到数据库并检索时,所有工作都按预期进行。
这个故事的寓意...不要使用 Ti.API.info()
记录长字符串,它们将被截断