我修改了一个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字符串时,它似乎已损坏。为了更好的示例,将此文本文件的内容复制到解码器中。
注意:当.php文件尝试解码它的数据:image/png;base64在前面时,我只是将它移除,以便您将它粘贴到解码器中。
http://www.motobit.com/util/base64-decoder-encoder.asp
我所能想到的是,由于某种原因,我可能没有正确地从Java输出base64字符串。有人知道怎么回事吗?或者是什么原因造成的呢?
昨晚我花了几个小时考虑了这些建议。
首先,我在编码之前检查图像。很好。
然而,在将其转到Javascript之前对其进行解码表明它已经损坏,这意味着它必须与Java编码过程有关。为了解决这个问题,我并不声称100%理解为什么会发生这种情况,但问题似乎出在这段代码上:
String mytextstring = "data:image/png;base64,"+base64String;
String mytextstring = base64String;
function returnScreenshotImage(imageData) {
base64string = "data:image/png;base64,"+imageData;
console.log("String: "+base64string);
var url = 'http://www.websitename.co.uk/upload.php';
var params = {image: imageData};
document.basicfrm.oldscreenshotimg.value = document.basicfrm.screenshotimg.value;
// send the data
$.post(url, params, function(data) {
document.basicfrm.screenshotimg.value = data;
});
}
正如您所看到的行:
base64string = "data:image/png;base64,"+imageData;
base64编码字符串:yobic4fy base64解码字符串(来自ASP页面):`àhsx(正确) Base64解码字符串(来自JSP页面和Eclipse):^àhs?x(不正确) Java/JSP代码: 重申一下,正确的值应该是。我不明白问题出在哪里。如有任何帮助,我们将不胜感激。 在ASP内部,明文值是从密码中正确实现的: 明文:foobar 密文:??hsx 解码的base64字符串:?
问题内容: 是否有仅使用JAVA 1.5 LIBRARIES来解码base64字符串的简便方法? 由于Windows和Mac OS X之间存在跨平台兼容性问题,我必须使用Java 1.5(仅Mac 10.5支持Java 1.6,低于10.5的所有内容均默认使用Java 1.5)。 对象“ sun.misc.Base64Decoder”在Java 6中存在,但在Java 5中不存在。 问题答案: 不
本文向大家介绍java实现图片转base64字符串 java实现base64字符串转图片,包括了java实现图片转base64字符串 java实现base64字符串转图片的使用技巧和注意事项,需要的朋友参考一下 java 图片转base64字符串、base64字符串转图片,具体内容如下 1. 图片转base64字符串: 2. base64字符串转图片: 3. 测试: 效果图: 以上就是本文的全部内
问题内容: 我有一个图像通过JSON字符串发送给我。我想将该字符串转换为我的Android应用程序中的图像,然后显示该图像。 JSON字符串如下所示: 注意:我用…截断了字符串。 我有一个函数(我认为)可以将字符串转换为图像。我这样做对吗? 然后我尝试像这样在我的android活动上显示它 但是,当我这样做时,什么也没有显示。我在logcat中没有任何错误。我究竟做错了什么? 谢谢 问题答案: 我
问题内容: 我正在尝试将屏幕截图输出作为base64编码的字符串输出,但距离不是很远。到目前为止,我拥有的代码使用Base64库(http://iharder.sourceforge.net/current/java/base64/): 每次运行此命令时,“结果”始终为空字符串,但我不明白为什么。有任何想法吗? 注意:我不想将png写入磁盘上的文件。 问题答案: 我遵循xehpuk的回答,但是某些
我想将一个字符串编码成并通过套接字传输它,然后解码回来。 下面是我的代码,结果是“77+9x6s=” 有什么想法如何实现这一点吗?