1

私は単純なAndroid専用アプリを使用していますmyView.toImage()

期待どおり、これは blob を返しています。

次に、このブロブを base64 にエンコードし、デコードされた文字列を にロードしてアプリでテスト デコードするとImageView、画像が完全にレンダリングされます。

しかし、php でこの文字列をデコードする場合、base64 文字列には 2 つの問題があります。まず、文字列の長さが常に 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.Button ではなく Ti.UI.View のインスタンスになったことです。

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 シミュレーターへのコンパイル

4

1 に答える 1

0

わかりました、これを 3 日間試して、3 日間フラストレーションを感じ、ようやく解決策が見つかりました。私が無駄にした時間を無駄にするのを誰かが避けるのに役立つなら:

これは実際にはずっと機能していましたが Ti.API.info()、結果の base64 文字列を表示するために a の出力を使用していました。長い文字列をTi.API.info()切り捨てるようです。base64 文字列がデータベースに保存され、取得されたとき、すべてが期待どおりに機能しました。

この話の教訓...Ti.API.info()長い文字列をログに記録しないでください。切り捨てられます

于 2016-06-15T13:09:13.730 に答える