【问题标题】:Force PhoneGap to save JPEG instead of PNG form camera强制 PhoneGap 保存 JPEG 而不是 PNG 格式的相机
【发布时间】:2014-02-16 14:35:05
【问题描述】:

我目前有一个正在工作的 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?

【问题讨论】:

标签: android cordova camera


【解决方案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;

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

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

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

埃米尔

【讨论】:

  • 感谢您的回答,因为我正在考虑放弃并选择 PNG。再次压缩图像不是一个坏主意,我现在就试试。此外,我对这个 PhoneGap 的东西(我的第一个应用程序)太陌生了,我什至不知道从 java 端添加 javascript 是可能的。谢谢。我确实有一个问题,尽管这无关紧要,为什么它在 WindowClean 下?现在直接在window下???
  • 我收到以下错误:!Valid XHTML i61.tinypic.com/bh0ggm.png" width="300" height="300"> 在我的清单中:!Valid XHTML跨度>
  • 请忽略我以前的 cmets,我正在尝试创建图像预览。这里是图片的链接i61.tinypic.com/bh0ggm.jpgi59.tinypic.com/2i7223r.png
  • 还要修复那些你需要导入一些类的红色下划线,我会尽快更新答案
  • 没问题。我已经对 Javascript 做了一个非常小的更新(再次),以防有人读到这个,并且他们想跨平台实现它,如果实际设备是 Android 设备,Javascript 应该只知道调用本机转换函数。跨度>
猜你喜欢
  • 2017-08-12
  • 2016-11-17
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 2011-12-23
  • 2023-04-01
  • 2019-04-04
相关资源
最近更新 更多