将 ImageProxy 转换为 Jpeg 或 Png

问题描述 投票:0回答:2

我刚刚开始使用 androidX 相机,我正在使用它的功能

imagecatpure.takePicture()
,并且我将
ImageProxy
作为对象,所以现在我的问题是如何将其转换为
jpeg/png/jpg
以便我可以通过API?

还有其他更有效的方法来实现这一目标吗?

android android-camera androidx
2个回答
0
投票

我已经使用下面的代码解决了这个问题

    private void takePicture() {
        if (imageCapture != null) {
            ByteArrayOutputStream result = new ByteArrayOutputStream();
            getCacheDir();
            imageCapture.takePicture(new ImageCapture.OutputFileOptions.Builder(result).build(),
                    Executors.newSingleThreadExecutor(),
                    new ImageCapture.OnImageSavedCallback() {
                        @Override
                        public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
                            File cache = new File(getCacheDir().getAbsolutePath() + "/" + "captured.png");
                            try (FileOutputStream stream = new FileOutputStream(cache)) {
                                stream.write(result.toByteArray());
                                upload(cache); // your upload function
                            } catch (Exception e) {
                                Log.e(TAG, "onImageSaved: Exception occurred", e);
                            }
                        }

                        @Override
                        public void onError(@NonNull ImageCaptureException exception) {
                            Log.i(TAG, "onError: ", exception);
                        }
                    });
        }
    }

感谢@Commonsware


0
投票

使用 ImageProxy 中的

toBitmap()
方法。使用 Bitmap 中的
compress
方法将此位图保存到文件中。确保按照图像代理文档中的指示应用适当的旋转。这在位图上最容易做到。

我不建议使用已接受的答案,因为您实际上被迫等到保存图像才能执行下一步操作。所讨论的原始方法

takePicture(Executor,ImageCapture.OnImageCapturedCallback)
包含一个具有更大灵活性的回调。主要区别在于,通过此回调,您可以首先通知用户照片已拍摄,然后您可以在保存图像时执行下一步需要执行的任何操作。

© www.soinside.com 2019 - 2024. All rights reserved.