我可以看到您正在使用 BASE64 编码从相机中获取图像,您可以尝试这样的方法(我没有测试过,但应该可以)
我希望您的计算机上安装了 Eclipse,而不是在云端构建。
所以在 Eclipse 中打开您的 MainActivity 并在您的 super.loadUrl 调用之前添加以下行:
appView.addJavascriptInterface(this, "YourActivityName");
现在在您的 onCreate 之后添加以下代码:
@JavascriptInterface
public String PNGtoJPEG(String my_image){
byte[] decodedString = Base64.decode(my_image, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
decodedByte.compress(Bitmap.CompressFormat.JPEG, 70, bao);
return Base64.encodeToString(bao.toByteArray(),Base64.URL_SAFE);
}
当您在 cameraSuccess 函数中的 HTML 文件中完成所有这些操作后,应该类似于以下内容:
function onSuccess(imageData) {
var image = document.getElementById('myImage');
//Only call Png to Jpeg IF we are on an android device.
if (device.platform!=='Android') {
var my_new_jpeg=window.YourAcitivityName.PNGtoJPEG(image);
}
}
想法是您在 Java 端调用一个自定义函数,将您的 Base64 图像转换回位图,然后将该位图压缩为 Jpeg 并作为 Base64 元素传递回 javascript。
没有完整测试代码是否正常工作,但应该让我知道它是否有帮助,如果没有帮助,我将构建一个快速应用程序并自己进行测试。
一些小更新
在您的主要活动中,您需要导入一些类:
import java.io.ByteArrayOutputStream;
import android.graphics.Bitmap;
import android.util.Base64;
import android.webkit.JavascriptInterface;
希望我没有忘记其中任何一个。如果您在低于 17 的 API 上构建,则必须删除 @JavascriptInterface 行
还有人认为我看到您正在使用 DroidGap,据我所知,这是一个过时的旧版本。无论如何它可能会起作用,但我建议更新到最新的 PhoneGap 版本,因此您的活动定义将如下所示:public class MobilePOS extends CordovaActivity 而不是 public class MobilePOS extends DroidGap
我希望所有这些都能有所帮助。
埃米尔