私はカメラの意図を使って、ユーザーが画像を撮ってFirebaseストレージに画像をアップロードできるようにしています。私はこのプロセスの間に、実際のイメージファイルではなくビットマップを引っ張っているので、かなりのイメージ品質が失われていることに気付いています。私は明らかにファイルサイズを制限し、必要な場所で圧縮したいと思いますが、元の画質も保持したいと思います。私はカメラの意図を呼び出し、写真を撮るようにユーザに促すのはここです:画像をロードする(ビットマップサムネイルではない)Android Camera Intentから
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に保存します。ここでは
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()メソッドであります:
ここ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);
}
});
}
あなたは完全なイメージを取得していません、あなたはただ問題を直面しているためにそれをキャプチャするイメージのサムネイルを再取得しています。 ビットマップimageBitmap =(ビットマップ)extras.get( "data"); –
別の方法で画像を取得しよう –
完全な画像を取得するにはどうすればよいですか?何を追加すればよいですか? – tccpg288