ヽ|∵|ゝ(Fantom) の 開発blog? ホーム »画像ファイル保存
このページの記事一覧

【Android】【Java】内部ストレージに画像ファイルを保存する(jpg)  


 前回の「内部ストレージに画像ファイルを保存する(png)」と同じもの。画像フォーマットを変えただけ。

//内部ストレージに、画像ファイルを保存する(jpg) (Android 用)
public static final boolean saveJpegLocalStorage(String fileName, Bitmap bitmap, int quality, Context context)
throws IOException, IllegalArgumentException {
BufferedOutputStream bos = null;
Bitmap tmp = null;
try {
bos = new BufferedOutputStream(context.openFileOutput(fileName, Context.MODE_PRIVATE)); //他アプリアクセス不可
tmp = bitmap.copy(Config.ARGB_8888, true);
return tmp.compress(Bitmap.CompressFormat.JPEG, quality, bos);
} finally {
if (tmp != null) {
tmp.recycle();
tmp = null;
}
try {
bos.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}

//メインでは... (※例外処理は省略)
String fileName = "sample.jpg"; // "data/data/[パッケージ名]/files/sample.jpg" となる
saveJpegLocalStorage(fileName, bitmap, 60, this); //bitmap は保存する画像/this は起動した Activity が良い(Context)
//ファイルが保存されていれば成功(エミュレータならDDMSで確認できる)

 例外処理は手抜きしてるので、必要あれば適当に。

 前回の PNG フォーマットと、画質の引数(quality)を合わせて1つの関数にしても良いが、高圧縮→jpg、無圧縮→png と使いわける事が多いため、あえて分離してある。エンコードは Bitmap クラスの compress() メソッドを使っているが、他のエンコーダーを用意しても良い。戻値の boolean は compress() の成功をそのまま返しているが、必要なければ無視しても良い。

 また、引数 quality は 0~100 の値(0:低画質で高圧縮、100:高画質で低圧縮)でなれけば、IllegalArgumentException が発生する。面倒なら、関数内で修正するコードを付け加えても良いかも知れない。

 ちなみにファイルの削除は Context.deleteFile() で簡単にできる。


(関連記事)
【Android】内部ストレージに画像ファイルを保存する(png)
【Android】内部ストレージから画像ファイルを読み込む
【Android】内部ストレージからテキストファイルを読み込む
【Android】内部ストレージにテキストファイルを保存する
【Android】SDカードに画像ファイルを保存する(png)
【Android】SDカードに画像ファイルを保存する(jpg)
【Android】assets フォルダから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


スポンサーサイト

category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル保存  内部ストレージ 
tb: 0   cm: --

【Android】【Java】内部ストレージに画像ファイルを保存する(png)  


 基本的には「内部ストレージにテキストファイルを保存する」と同じ考え方で、ストリームを開いた後は、画像フォーマットによるエンコード処理に置き換えれば良い。

//内部ストレージに、画像ファイルを保存する(png) (Android 用)
public static final boolean savePngLocalStorage(String fileName, Bitmap bitmap, Context context) throws IOException {
BufferedOutputStream bos = null;
Bitmap tmp = null;
try {
bos = new BufferedOutputStream(context.openFileOutput(fileName, Context.MODE_PRIVATE)); //他アプリアクセス不可
tmp = bitmap.copy(Config.ARGB_8888, true);
return tmp.compress(Bitmap.CompressFormat.PNG, 100, bos);
} finally {
if (tmp != null) {
tmp.recycle();
tmp = null;
}
try {
bos.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}


//メインでは... (※例外処理は省略)
String fileName = "sample.png"; // "data/data/[パッケージ名]/files/sample.png" となる
savePngLocalStorage(fileName, bitmap, this); //bitmap は保存する画像/this は起動した Activity が良い(Context)
//ファイルが保存されていれば成功(エミュレータならDDMSで確認できる)

 例外処理は手抜きしてるので、必要あれば適当に。

 とりあえず、PNG フォーマットで、画質100固定になっているので、引数で変更しても良いだろう。エンコードは Bitmap クラスの compress() メソッドを使っているが、他のエンコーダーを用意しても良い。戻値の boolean は compress() の成功をそのまま返しているが、必要なければ無視しても良い。

 ちなみにファイルの削除は Context.deleteFile() で簡単にできる。


(関連記事)
【Android】内部ストレージに画像ファイルを保存する(jpg)
【Android】内部ストレージから画像ファイルを読み込む
【Android】内部ストレージからテキストファイルを読み込む
【Android】内部ストレージにテキストファイルを保存する
【Android】SDカードに画像ファイルを保存する(png)
【Android】SDカードに画像ファイルを保存する(jpg)
【Android】assets フォルダから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル保存  内部ストレージ 
tb: 0   cm: --

【Android】【Java】SDカードに画像ファイルを保存する(jpg)  


前回の「SDカードに画像ファイルを保存する(png)」と同じもので、画像フォーマットを変えただけ。

isMountSDCard(), toSDCardAbsolutePath() は以前に作ったものを、そのまま使えば良い。
(※) Android4.4(API 19)あたりから内部ストレージの仮想パスに変わった模様

また書き込みの場合は、マニフェストファイル(AndroidManifest.xml) に以下のパーミッションが必要になる。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

//SDCard に、画像ファイルを保存する(jpg) (Android 用)
//<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> が必要。
public static final boolean saveJpegSDCard(String fileName, Bitmap bitmap, int quality)
throws IOException, IllegalArgumentException {
if (!isMountSDCard()) {
throw new IOException("No Mount");
}
BufferedOutputStream bos = null;
Bitmap tmp = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(toSDCardAbsolutePath(fileName)));
tmp = bitmap.copy(Config.ARGB_8888, true);
return tmp.compress(Bitmap.CompressFormat.JPEG, quality, bos);
} finally {
if (tmp != null) {
tmp.recycle();
tmp = null;
}
try {
bos.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}

//メインでは... (※例外処理は省略)
String fileName = "sample.jpg"; // "mnt/sdcard/sample.jpg" or "sdcard/sample.jpg" 等に保存される(端末による)
saveJpegSDCard(fileName, bitmap, 60); //bitmap は保存する画像, 画質60
//ファイルが保存されていれば成功(エミュレータならDDMSで確認できる)

例外処理は手抜きしてるので、必要あれば適当に。
実機での確認は、「マイファイル」のようなアプリで簡単に覗くことができる(アプリは端末による)。

前回の PNG フォーマットと、画質の引数(quality)を合わせて1つの関数にしても良いが、高圧縮→jpg、無圧縮→png と使いわける事が多いため、あえて分離してある。エンコードは Bitmap クラスの compress() メソッドを使っているが、他のエンコーダーを用意しても良い。そういうときもフォーマットごとに分かれてる方が修正し易い気がする。戻値の boolean は compress() の成功をそのまま返しているが、必要なければ無視しても良い。

また、引数 quality は0~100以内の値(0:低画質で高圧縮、100:高画質で低圧縮)でなれけば、IllegalArgumentException が発生する。面倒なら、関数内で修正するコードを付け加えても良いだろう。

SDカードのマウント状態だけしかチェックしてないので、必要なら MOUNTED_READ_ONLY (読み取り専用) などもチェックした方が良いかも知れない。その辺は外部ストレージの状態を参考にして、色々付け加えると良いだろう。


(関連記事)
【Android】SDカードに画像ファイルを保存する(png)
【Android】SDカードから画像ファイルを読み込む
【Android】SDカードからテキストファイルを読み込む
【Android】SDカードにテキストファイルを保存する
【Android】SDカードのファイルを削除する
【Android】内部ストレージに画像ファイルを保存する(png)
【Android】内部ストレージに画像ファイルを保存する(jpg)
【Android】assets フォルダから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル保存  SDカード 
tb: 0   cm: --

【Android】【Java】SDカードに画像ファイルを保存する(png)  


基本的には「SDカードにテキストファイルを保存する」と同じ考え方で、ストリームを開いた後は、画像フォーマットによるエンコード処理に置き換えれば良い。

isMountSDCard(), toSDCardAbsolutePath() は以前に作ったものを、そのまま使う。
(※) Android4.4(API 19)あたりから内部ストレージの仮想パスに変わった模様

また書き込みの場合は、マニフェストファイル(AndroidManifest.xml) に以下のパーミッションが必要になる。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

//SDCard に、画像ファイルを保存する(png) (Android 用)
//<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> が必要。
public static final boolean savePngSDCard(String fileName, Bitmap bitmap) throws IOException {
if (!isMountSDCard()) {
throw new IOException("No Mount");
}
BufferedOutputStream bos = null;
Bitmap tmp = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(toSDCardAbsolutePath(fileName)));
tmp = bitmap.copy(Config.ARGB_8888, true);
return tmp.compress(Bitmap.CompressFormat.PNG, 100, bos);
} finally {
if (tmp != null) {
tmp.recycle();
tmp = null;
}
try {
bos.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}

//メインでは... (※例外処理は省略)
String fileName = "sample.png"; // "mnt/sdcard/sample.png" or "sdcard/sample.png" 等に保存される(端末による)
savePngSDCard(fileName, bitmap); //bitmap は保存する画像
//ファイルが保存されていれば成功(エミュレータならDDMSで確認できる)

例外処理は手抜きしてるので、必要あれば適当に。
実機での確認は、「マイファイル」のようなアプリで簡単に覗くことができる(アプリは端末による)。

とりあえず、PNG フォーマットで、画質100固定になっているので、引数で変更しても良いだろう(⇛JPEG保存版)。エンコードは Bitmap クラスの compress() メソッドを使っているが、他のエンコーダーを用意しても良い。戻値の boolean は compress() の成功をそのまま返しているが、必要なければ無視しても良い。

SDカードのマウント状態だけしかチェックしてないので、必要なら MOUNTED_READ_ONLY (読み取り専用) などもチェックした方が良いかも知れない。その辺は外部ストレージの状態を参考にして、色々付け加えると良いだろう。


(関連記事)
【Android】SDカードに画像ファイルを保存する(jpg)
【Android】SDカードから画像ファイルを読み込む
【Android】SDカードからテキストファイルを読み込む
【Android】SDカードにテキストファイルを保存する
【Android】SDカードのファイルを削除する
【Android】内部ストレージに画像ファイルを保存する(png)
【Android】内部ストレージに画像ファイルを保存する(jpg)
【Android】assets フォルダから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル保存  SDカード 
tb: 0   cm: --
IS<インフィニット・ストラトス> アーキタイプ・ブレイカー
キルドヤ


プロフィール

Twitter

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop