Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidアプリで画像ファイルを内部ストレージに保存する方法【実装手順を解説】

この記事では、Androidアプリ内で画像ファイルを内部ストレージ(Internal Storage)に書き込む方法を、実際のコード例とともに解説します。サンプルとして、ボタンをタップするとリソース内の画像をJPEG形式で端末の内部ストレージに保存する簡単なアプリを作成します。

Step 1:Android Studioで新規プロジェクトを作成する

まず、Android Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目(プロジェクト名、パッケージ名、保存先など)を入力してプロジェクトのセットアップを完了させてください。

Step 2:レイアウトファイル(activity_main.xml)を編集する

次に、res/layout/activity_main.xml に以下のコードを追加します。

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
xmlns:tools = "https://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity"
android:orientation = "vertical">
<Button
android:id = "@+id/save"
android:text = "save"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
</LinearLayout>

このレイアウトには「save」というラベルのボタンが1つ配置されています。ユーザーがこのボタンをタップすると、画像データが内部ストレージに保存される仕組みです。

Step 3:MainActivity.java に保存処理を実装する

続いて、src/MainActivity.java に以下のコードを記述します。

package com.example.andy.myapplication;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.File;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity {
    Button save;
    Bitmap bitmap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Drawable drawable = getResources().getDrawable(R.drawable.mario);
        bitmap = ((BitmapDrawable) drawable).getBitmap();
        save = findViewById(R.id.save);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ContextWrapper cw = new ContextWrapper(getApplicationContext());
                File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
                File file = new File(directory, "UniqueFileName" + ".jpg");
                if (!file.exists()) {
                    Log.d("path", file.toString());
                    FileOutputStream fos = null;
                    try {
                         fos = new FileOutputStream(file);
                         bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                         fos.flush();
                         fos.close();
                    } catch (java.io.IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}

コードのポイント

  • 画像の取得: getResources().getDrawable() でドローアブルリソースから画像を取得し、BitmapDrawable 経由で Bitmap オブジェクトに変換しています。
  • 保存ディレクトリの作成: ContextWrapper.getDir("imageDir", Context.MODE_PRIVATE) を使うことで、アプリ専用のプライベートなディレクトリ「imageDir」が作成されます。このモードでは他のアプリからアクセスできません。
  • ファイルへの書き込み: bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos) により、Bitmap をJPEG形式・品質100で出力ストリームに書き込んでいます。処理後は flush()close() を呼び出してストリームを確実に閉じることが重要です。

アプリを実行して動作を確認する

それでは、実際にアプリを起動してみましょう。Android端末をPCに接続していることを確認してください。Android Studioでアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。接続した実機を選択すると、端末に以下のような初期画面が表示されます。

Androidアプリで画像ファイルを内部ストレージに保存する方法【実装手順を解説】

表示された画面で「save」ボタンをタップすると、画像が内部ストレージに保存されます。

Androidアプリで画像ファイルを内部ストレージに保存する方法【実装手順を解説】

まとめ

本記事では、AndroidアプリでBitmap画像をJPEG形式に圧縮し、Context.MODE_PRIVATE のプライベートディレクトリへ書き込む方法を紹介しました。内部ストレージはアプリ専用領域のため、外部ストレージの権限(パーミッション)を追加しなくても保存できるのが特徴です。カメラ画像やダウンロードした画像の一時保存など、さまざまな場面で応用できるテクニックなので、ぜひ参考にしてください。

  1. Androidスマホの内部ストレージを解放する方法|空き容量不足を解消する4つのテクニック

    近年の技術革新に伴い、Androidスマートフォンは世界中でますます人気が高まっています。画面をタッチするだけであらゆる作業がこなせるため、多くの人が従来のフィーチャーフォンではなくスマートフォンを選ぶようになりました。Androidは定期的にバージョンアップを行い、システム強化によって既存ユーザーにも新規ユーザーにもより良い体験を提供し続けています。しかし、こうした進化には代償が伴います。OSが更新され、アプリがより快適に動作し、ゲームがよりリアルになる一方で、スマホのストレージ容量はどんどん圧迫されていくのです。「内部ストレージの空き容量が不足しています」という警告が表示された経験がある方

  2. Androidストレージ入門:内部ストレージと外部ストレージの違いと使い分け

    ストレージは誰もが知っている存在でありながら、ついその重要性を見過ごしてしまいがちなものです。かつてはストレージ容量のわずかな増加さえも大きな飛躍であり、実現不可能に思えることさえありました。しかし今では、デバイスにどれだけの容量があるかを気にする人はほとんどいません(その違いに関心を持つ人はさらに少ないでしょう)。 より重要なのは、ストレージに保存されるデータの変遷に目を向けることです。スマートフォン以前の時代、私たちが保存していたのはたまに撮影した写真数枚、いくつかのゲーム、そして大量のテキストメッセージ程度でした。しかし現在、標準的なスマートフォンには、アプリケーション、ドキュメント、写