Uri => File => FileInputStream => Bitmap というルートもあります ストレージから画像を ImageView に表示する ※ ファイル名やフォルダは既知である事を前提としています。
// ************************************* // パスの取得 // ************************************* String path = String.format( "%s/firebase/20161108_011922.jpg", Environment.getExternalStorageDirectory().getPath() ); // ************************************* // ImageView // ************************************* Bitmap image = null; FileInputStream fis; try { fis = new FileInputStream(path); image = BitmapFactory.decodeStream(fis); } catch (Exception e) { e.printStackTrace(); } // 画像データが取得されていたら if ( image != null ) { // imageView へ表示 imageView.setImageBitmap(image); }
パスから FileInputStream を作成して、BitmapFactory.decodeStream でビットマップに変換します。画像表示は ImageView の setImageBitmap です。 Bitmap を使用した画像の回転
// バイト配列を Bitmap に変換( 内容は既に jpeg ) Bitmap image1 = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); // 90度回転 int width = image1.getWidth(); int height = image1.getHeight(); Matrix matrix = new Matrix(); matrix.postRotate (90); Bitmap image2 = Bitmap.createBitmap (image1, 0, 0, width, height, matrix, true);
(※参考) ImageView を使用して画像を回転 ギャラリーから画像を ImageView に表示する ギャラリーから返されるのは、Uri です。Uri を直接使用する setImageURI を使用します。 setImageURI(null) は、キャッシュされないようにする効果が期待できると想像しています。
// ギャラリーの呼び出し Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(intent, 10); // 10 は任意 // ------------------------------- // ギャラリーからの戻り // ※ onActivityResult は MainActivity のメソッドです @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 10 && resultCode == Activity.RESULT_OK) { if (data != null) { Uri uri = data.getData(); imageView.setImageURI(null); imageView.setImageURI(uri); } } }
(※参考) Exif情報を利用して、画像を回転 Firebase の putFile と putStream どちらも大差はありません。アップロード前に加工が必要なら、putStream になるかもしれませんし、コードを簡潔にするには、putFile だと例外処理がありませんから、キャッシュに書き込んでからアップロードしてもいいかもしれません。
// ************************************* // FireBase putFile // ************************************* Uri file = Uri.fromFile(new File(path)); imageRef = storageRef.child(file.getLastPathSegment()); UploadTask uploadTask = imageRef.putFile(file); uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { Log.i("lightbox","アップロードに成功しました"); long size = taskSnapshot.getMetadata().getSizeBytes(); Log.i("lightbox",String.format("サイズ : %d",size)); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.i("lightbox","アップロードに失敗しました"); } }); // ************************************* // FireBase putStream // ************************************* Uri file = Uri.fromFile(new File(path)); imageRef = storageRef.child(file.getLastPathSegment()); InputStream stream = null; try { stream = new FileInputStream(new File(path)); } catch (Exception e) { e.printStackTrace(); } if ( stream != null ) { UploadTask uploadTask = imageRef.putStream(stream); uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { Log.i("lightbox", "アップロードに成功しました"); long size = taskSnapshot.getMetadata().getSizeBytes(); Log.i("lightbox", String.format("サイズ : %d", size)); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.i("lightbox", "アップロードに失敗しました"); } }); }
|
【2016 Android Studioの最新記事】
- Android Studio で Twitter4J で ListView に検索結果を表示する
- Android Studio で Twitter4J で画像付きツイート
- カメラを起点とした画像データの処理 / Android
- バグ : Android Studio 2.2.2 で、spinnerMode を dialog に設定すると app:spinnerMode となってしまいます
- ListView + カスタム ArrayAdapter + ViewSwitcher + Firebase API + Data Binding : 更新処理 / Android Studio
- Firebase storage に画像をアップロードする。1) ギャラリーから、2) 実行中の画面 / Android
- Android : 画像関連のテスト用カメラアプリ
- Firebase storage の画像を ファイルとしてダウンロードして ギャラリーに保存する( ImageView にも表示する ) / Android
- Firebase storage の画像の URL を取得して、通常と同様に Stream でダウンロードして ImageView に表示する / Android
- Firebase storage の画像をメモリに直接ダウンロードして ImageView に表示する / Android
- Android : Firebase の データを REST API の PUT コマンドで更新する
- Firebase API + Android Studio : Database のデータを Java に取得する方法は3通りあります。(orderByChild 使う場合は、getChildren ..
- Android : Data Binding + Firebase API で ListView にデータを表示する
- Firebase API + Android Studio : Database 処理の基本設定
- Android Studio 2.2 で新規プロジェクトを作成すると『Could not reserve enough space for 1572864KB object heap』というエラーが出..
- Firebase API + Android Studio : Database にデータを保存は単純で、DatabaseReference の setValue メソッドを使用します