【问题标题】:Android Camera Intent Capture Photo and Resize Photo before SaveAndroid Camera Intent 捕获照片并在保存前调整照片大小
【发布时间】:2025-12-16 06:50:02
【问题描述】:

我正在用我的原生 Android 手机相机拍照!但我想要的是调整拍摄照片的大小然后保存。

我一直在尝试的是:

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,然后我保存了它。

但我想知道

我如何调整从安卓相机意图捕捉到的照片的大小和 然后保存?

【问题讨论】:

  • 调整大小是什么意思,有什么具体的比例吗?像 720*720 吗?什么?
  • 没有。不可能的。使用这样的相机意图总是首先保存图像。请改用 Camera 类。
  • 我只需要以任意比例调整图像大小,例如 200x200...任意

标签: android image camera android-bitmap android-camera-intent


【解决方案1】:

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

您的选择是:

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

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

  • 实现一个ContentProvider,它将接收来自相机应用程序的图像,然后在自己保存之前调整它的大小。这不太可能奏效,因为您不太可能有足够的堆空间来处理完整大小的图像。

【讨论】:

  • , rather than saving the image to a file, the camera app should give you a thumbnail-sized image。两者都可以。
  • @greenapps:这完全取决于相机应用程序。一个写得很好的相机应用程序只会提供缩略图大小的图像。唉,成千上万的 Android 设备型号上预装了数百个相机应用程序,但似乎并非所有开发者都阅读了文档。
  • 是否值得依赖 Intent 的“数据”而不是“extra_output”?因为AFAIK两者的内容在图像的分辨率和大小方面有很大的不同?如果我错了,请纠正我。
  • @Hemang:你是对的。这就是为什么我注意到第二个项目符号中的缩略图大小的图像和第三个项目符号中的全尺寸图像。