【发布时间】:2017-05-11 19:04:01
【问题描述】:
我正在使用相机 Intent 允许用户拍照并将图像上传到 Firebase 存储。我注意到在此过程中,由于我拉的是位图而不是实际的图像文件,因此会丢失相当多的图像质量。我显然想限制文件大小并在必要时进行压缩,但我也想保留原始图像质量。这是我调用相机意图并提示用户拍照的地方:
case 1:
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getApplication().getPackageManager()) != null) {
startActivityForResult(takePictureIntent, TAKE_PICTURE);
} else {Toast.makeText(getApplicationContext(), getResources().getString(R.string.camera_error), Toast.LENGTH_LONG).show();
}
break;
这是我检索图像数据的 .onActivityResult() 方法:
case TAKE_PICTURE:
//TODO: Limit file size to prevent reaching Firebase storage limit
if (resultCode == CreateActivity.RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
mImagePreview.setDrawingCacheEnabled(true);
mImagePreview.buildDrawingCache();
mImagePreview.setImageBitmap(imageBitmap);
encodeBitmapAndSaveToFirebase(imageBitmap);
}
break;
并保存到 Firebase:
private void encodeBitmapAndSaveToFirebase(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
String uniqueID = java.util.UUID.randomUUID().toString();
mFileRef = mStorageRef.child(uniqueID);
UploadTask uploadTask = mFileRef.putBytes(data);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Toast.makeText(getApplicationContext(), "Error Loading Photo", Toast.LENGTH_LONG).show();
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
Uri downloadUrl = taskSnapshot.getDownloadUrl();
resultImageURL = downloadUrl.toString();
Picasso.with(getApplicationContext())
.load(resultImageURL)
.into(mImagePreview);
}
});
}
【问题讨论】:
-
你没有得到完整的图像,你只是得到了缩略图,它只是 retunt 图像的缩略图,你捕获的就是你面临的问题 Bitmap imageBitmap = (Bitmap) extras.get("data");
-
尝试其他方式获取图片
-
如何获取完整图像?我要额外使用什么?
标签: android image firebase android-camera firebase-storage