这里有相当数量的代码与我无关 . 我有一个改变的phonegap插件 . Java部分输出base64字符串:
package org.apache.cordova;
import java.io.ByteArrayOutputStream;
import java.io.File;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Base64;
import android.view.View;
public class Screenshot extends Plugin {
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
// starting on ICS, some WebView methods
// can only be called on UI threads
final Plugin that = this;
final String id = callbackId;
super.cordova.getActivity().runOnUiThread(new Runnable() {
//@Override
@TargetApi(8)
public void run() {
View view = webView.getRootView();
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
File folder = new File(Environment.getExternalStorageDirectory(), "Pictures");
if (!folder.exists()) {
folder.mkdirs();
}
File f = new File(folder, "screenshot_" + System.currentTimeMillis() + ".png");
System.out.println(folder);
System.out.println("screenshot_" + System.currentTimeMillis() + ".png");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String base64String = Base64.encodeToString(b, Base64.DEFAULT);
String mytextstring = "data:image/png;base64,"+base64String;
System.out.println(mytextstring);
that.success(new PluginResult(PluginResult.Status.OK, mytextstring), id);
}
});
PluginResult imageData = new PluginResult(PluginResult.Status.NO_RESULT);
imageData.setKeepCallback(true);
System.out.println("imageData=============>>>>>"+imageData);
return imageData;
}
}
然后我将其传递给一些Javascript,然后将字符串发送到服务器 . 我检查了.php文件收到的字符串,并且base64字符串是相同的 . 但是,当我解码base64字符串时,它似乎已损坏 . 有关更好的示例,请将此文本文件的内容复制到解码器中 .
http://dl.dropbox.com/u/91982671/base64.txt
Note: 当.php文件尝试解码数据时:image / png; base64,面前,我刚刚将其删除,以方便您将其粘贴到解码器中 .
解码器在这里找到:
http://www.motobit.com/util/base64-decoder-encoder.asp
我能想到的是,由于某种原因,我可能无法从Java正确输出base64字符串 . 有没有人知道最新情况?或者是什么原因造成的?
1 回答
我昨晚玩了好几个小时,并考虑了其中的一些建议 .
首先,我在编码之前检查了图像 . 很好 .
然而,在它转到Javascript之前解码它表明它已损坏,这意味着它必须与Java编码过程有关 . 为了解决这个问题,我并没有声称100%理解它为什么会发生,但问题似乎在于这个代码:
以及我在将数据发送到Javascript和PHP解码器之前添加“data:/ image / png; base64”的方式 . 为了解决这个问题,我将它从Java代码中删除,因此它变为:
在我发送到服务器的JavaScript函数中,我将它添加到那里的字符串,这可以工作,我收到了一个未损坏的图像 . 只是在任何人想知道/关心我在其中添加它的Javascript函数,而不是:
正如你所看到的那样:
添加以前由Java添加的部分 . 这现在有效 . 希望这有助于未来的人们 . 如果有人愿意评论广告解释为什么这是他们知道如果自由 . :)