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

关于Android开源库TakePhoto相关
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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
函数只是一个示例,实际使用时可能需要根据具体需求调整参数和逻辑。此外,为了防止意外删除文件或错误写入,建议将文件存储在安全的位置,或者考虑使用云存储服务。解决 无用评论 打赏 举报