五月的爸爸 2019-10-28 17:36 采纳率: 0%
浏览 338

关于Android开源库TakePhoto相关

  1. 使用内部存储标识路径时,在takeSuccess(TResult tResult)方法中无法获取到路径
  2. 使用luban压缩,调用图片选择,在回调中使用result.getImage().getCompressPath()无法获取到压缩的路径,只有result.getImage().getOriginalPath()才可以获取到
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-29 21:05
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Android开发中,takeSuccess()方法用于启动相机并返回图像数据。然而,在某些情况下,您可能希望在处理这些图像之前对其进行压缩。这通常涉及到使用一个外部存储文件系统(例如SD卡),而不是直接从设备的内部存储。

    对于您的第一个问题,如果您想要在takeSuccess()方法之后获取图像的数据,请确保在onActivityResult()方法中调用getData()方法来获取图像数据。这是因为在takeSuccess()方法之后,您应该能够通过这个方法获得图像数据。

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            Bitmap bitmap = null;
            try {
                bitmap = BitmapFactory.decodeStream(data.getData());
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            // 处理压缩后的图像
            compressImage(bitmap);
        }
    }
    

    对于第二个问题,如果要从外部存储读取图像,并且想要获取其压缩后的路径,您可以使用以下步骤:

    private String getCompressedFilePath(Bitmap image) throws IOException {
        File directory = new File(Environment.getExternalStorageDirectory(), "MyPictures");
        if (!directory.exists()) {
            boolean created = directory.mkdirs();
            if (!created) {
                throw new IOException("Failed to create directory.");
            }
        }
    
        File file = new File(directory, System.currentTimeMillis() + ".jpg");
        FileOutputStream out = new FileOutputStream(file);
        image.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
    
        return file.getAbsolutePath();
    }
    
    private void compressImage(Bitmap originalImage) {
        // 压缩图像为原始大小的50%
        Bitmap compressedBitmap = originalImage;
    
        // 使用LUBAN压缩库进行压缩
        Compressor compressor = new Compressor.Builder()
                .setTargetBitRate(50 * 1000)
                .setMaxBytes(1048576)
                .build();
        compressedBitmap = compressor.compress(compressedBitmap);
    
        // 保存压缩后的图像
        saveCompressedImage(compressedBitmap, "compressed.jpg");
    }
    

    请注意,上述代码中的compressImage函数只是一个示例,实际使用时可能需要根据具体需求调整参数和逻辑。此外,为了防止意外删除文件或错误写入,建议将文件存储在安全的位置,或者考虑使用云存储服务。

    评论

报告相同问题?