强制PhoneGap保存JPEG而不是PNG格式的相机

时间:2014-02-16 14:35:05

标签: android cordova camera

我目前有一个可以运行的PhoneGap应用程序,可以拍照并将图像保存到服务器上。

我知道PNG加载速度比JPEG慢,这就是我想改变phoneGap工作方式的原因。

现在,当用户拍照时,它会自动以PNG格式发送到服务器。如何告诉PhoneGap强制相机应用程序保存JPEG? (使用CYMERA测试)

我尝试将Camera.EncodingType.JPEG添加到选项中,但仍将其保存为PNG。 这是我用过的选项:

{quality: 70, allowEdit: true, sourceType: 1, destinationType: 0, targetWidth: 500, targetHeight: 500, encodingType: Camera.EncodingType.JPEG}

谁能告诉我这里缺少什么? 为什么不将“Camera.EncodingType.JPEG”保存为JPEG?

1 个答案:

答案 0 :(得分:1)

我可以看到你正在使用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;

希望我没有忘记其中的任何一个。如果您使用的API低于17,则必须删除@JavascriptInterface

还有一个人认为我看到你正在使用DroidGap,据我所知这是一个陈旧过时的版本。无论如何它可能会起作用,但我建议更新到最新的PhoneGap版本,因此您的活动定义将如下所示:public class MobilePOS extends CordovaActivity而不是public class MobilePOS extends DroidGap

我希望所有这些都有所帮助。

了Emil