【问题标题】:Titanium View.toImage() and base64 encode not always decoding properlyTitanium View.toImage() 和 base64 编码并不总是正确解码
【发布时间】:2016-06-14 13:26:57
【问题描述】:

我有一个使用 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 编译成安卓平板和Genymotion模拟器

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 有时,在对 ImageView 进行编码后,编码后的字符串会在 76 个字符集后出现断行:jira.appcelerator.org/browse/TIMOB-9111。我正在使用正则表达式来删除那些: myEncodedImage.toString().replace(/(\r\n|\n|\r)/gm,'')
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2012-06-02
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多