安卓相机意图捕获照片并在保存前调整照片大小



我正在用我的原生安卓手机相机拍照!但我想要的是调整捕获的照片的大小,然后保存。

我一直在尝试的是:

public void takePhoto() {
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        File folder = new File(Environment.getExternalStorageDirectory() + "/PhotoBox");
        if (!folder.exists()) {
            folder.mkdir();
        }
        final Calendar c = Calendar.getInstance();
        String new_Date = c.get(Calendar.DAY_OF_MONTH) + "-" + ((c.get(Calendar.MONTH)) + 1) + "-" + c.get(Calendar.YEAR) + " " + c.get(Calendar.HOUR) + "-" + c.get(Calendar.MINUTE) + "-" + c.get(Calendar.SECOND);
        path = String.format(Environment.getExternalStorageDirectory() + "/" + "PhotoBox" + "/%s.png", "Product(" + new_Date + ")");
        File photo = new File(path);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
        xPath = path;
        startActivityForResult(intent, 2);
    }

我知道拍摄照片后我的图像正在保存。我可以通过创建缩放的位图来调整图像大小!但是在相机意图的情况下,我得到的只是捕获图像的 Uri,然后我保存了它。

但我想知道

如何从ANDROID相机意图和 然后保存 ?

您正在使用EXTRA_OUTPUT .这将要求相机应用将图像保存到该位置。在您的情况下,您将其指向一个文件,因此相机应用程序会将图像保存到该文件。它将在将控制权返回给您之前执行此操作,因此您无法在此之前调整图像大小。

您的选择是:

  • 之后只需调整图像大小即可。

  • Intent中删除EXTRA_OUTPUT。然后,相机应用程序应该通过onActivityResult()中交给您的Intent中的"data"为您提供缩略图大小的图像,而不是将图像保存到文件中。此缩略图可能根本不需要调整大小;即使有,您也可以在将其保存到某个位置之前调整其大小。

  • 实现一个将从相机应用接收图像的ContentProvider,然后在自己保存图像之前调整其大小。这不太可能起作用,因为您不太可能有足够的堆空间来处理全尺寸图像。

最新更新