安卓保存图片到SD卡,使用byte流

头几天遇到一个问题:在安卓开发应用中保存图片到SD卡,并且 用户在图库中搜到,类似于缓存的那种形式。最开始的第一想法是改一下后缀名,例如把一个图片保存为image1.txt,这样保存当然没问题,但在应用中读取中就不行了,后来也没研究为什么不能正常读取,毕竟这种办法太土鳖了。。。

今天有空上网搜了一下,发现使用byte流保存到SD卡就可以满足我的需求。下面我把正常保存图片文件的代码和保存图片byte流的代码都贴出来,方便大家共同学习参考。

假设我的图片的名字为 image1。

正常保存图片文件的代码(例如image1.png):

public static void savePhotoToSDCard(Bitmap photoBitmap,String path,String photoName){
		if (checkSDCardAvailable()) {
			File dir = new File(path);
			if (!dir.exists()){
				dir.mkdirs();
			}

			File photoFile = new File(path , photoName + ".png");
			FileOutputStream fileOutputStream = null;
			try {
				fileOutputStream = new FileOutputStream(photoFile);
				if (photoBitmap != null) {
					if (photoBitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream)) {
						fileOutputStream.flush();
//						fileOutputStream.close();
					}
				}
			} catch (FileNotFoundException e) {
				photoFile.delete();
				e.printStackTrace();
			} catch (IOException e) {
				photoFile.delete();
				e.printStackTrace();
			} finally{
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

下面是保存图片byte流的代码,这样sd卡就会有一个名为image1的文件。

	public static byte[] bitmapToBytes(Bitmap bm) {
		byte[] bytes = null;
		if (bm != null) {
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
			bytes = baos.toByteArray();
		}
		return bytes;
	}

	public static void savePhotoToSDCardByte(Bitmap photoBitmap,String path,String photoName){
		if (checkSDCardAvailable()) {
			File dir = new File(path);
			if (!dir.exists()){
				dir.mkdirs();
			}
			if(photoBitmap !=null)
			{
				byte[] byteArray = bitmapToBytes(photoBitmap);
				File photoFile = new File(path , photoName);
				FileOutputStream fileOutputStream = null;
				BufferedOutputStream bStream = null;
				try {
					fileOutputStream = new FileOutputStream(photoFile);
					bStream = new BufferedOutputStream(fileOutputStream);
					bStream.write(byteArray);
				} catch (FileNotFoundException e) {
					photoFile.delete();
					e.printStackTrace();
				} catch (IOException e) {
					photoFile.delete();
					e.printStackTrace();
				} finally{
					try {
						bStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}//(photoBitmap !=null)
		}
	}
时间: 2024-10-12 11:08:48

安卓保存图片到SD卡,使用byte流的相关文章

安卓工具类------>SD卡相关的辅助类

import java.io.File; import android.os.Environment; import android.os.StatFs; //SD卡相关的辅助类 public class SDCardUtils { private SDCardUtils() { /* cannot be instantiated */ throw new UnsupportedOperationException("cannot be instantiated"); } /** *

android 开发:保存图片到SD卡上

1 byte[] bytes = decodeImagStr(imgString);//使用base64对图片进行解码 2 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//检查sd卡的状态 3 String pathDir= Environment.getExternalStorageDirectory()+ ConstantsForFile.TMP_FILE_DIRECTORY;//设定

我的看法和总结----关于安卓手机上SD卡等名称和叫法的解释

因今天本小白要用到Android里面的Envirement类,来读取手机内存里面的信息. 却一直纠结在到底什么是手机内存卡,什么是内置SD卡,什么是ROM,什么是RAM...... 下面就是我的总结,写错的地方还请路过的博友们多多指教. 在我看来: 我们平常所说的内存卡在我看来可以分为两类:手机自带内存卡和小小的黑黑的TF卡(外置内存卡:可以插进手机里面的) 手机自带内存卡:这个用图来表示会更加的直观一些     TF卡:也就是我们平常在用的,卡片照相机里的,或者是以前老手机里面可以随意拔插的小

安卓手机内外SD卡互换

相信有許多人....有內置sd太小...外置sd(sdcard2或extsd)卻只能放資料.... 一些遊戲或者是影音播放軟體....根本不會去讀外置sd(sdcard2或extsd)..... 記憶卡買多大都沒啥用.....非常困擾..... 終於...給我找到修改路徑的方法.......注意....android4.0以上適用....4.0以下的話路徑不太一樣!! 1.android4.0版本適用 2.需root 3.使用ES文件瀏覽器,找到system/etc/vold.fstab這個文件

android打开,保存图片到sd卡,显示图片

1.打开根目录下test.jpg Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.jpg"); int[] pixels = new int[bm.getWidth()*bm.getHeight()]; bm.getPixels =(pixels,0,bm.getWidth(),0,0,bm.getWidth(),bm.getH

Android——数据存储(四种方式之二)读写SD卡

Android--数据存储(四种方式) 1.SharedPrefereces 只能保存一些简单的数轻量级.XML  存储文件名, 数据保存在data/data/basepackage/shared_prefs/myopt.xml中    实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default) 2.读写SD卡  SD的根目录  适用于数据流读写 实现步骤:加入读写SD卡权限

Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)

Android自定义照相机实现 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是通过自定义的方式来实现手机照相的功能. 创建一个项目:FingerTakePicture 首先来搞一下界面: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&qu

android 读取,写入图片到sd卡源码

<pre name="code" class="html"><!--<span style="font-family: Arial, Helvetica, sans-serif;">在AndroidMainfest.xml文件中添加</span><span style="font-family: Arial, Helvetica, sans-serif;">-->&l

安卓手机的加密设备和加密外置SD卡

手机一旦被偷或者遗失,那么隐私就会泄露了,安卓手机中有"加密设备"和"加密外置sd卡"的功能.那么这两项功能有什么用有什么区别呢? 加密设备 加密设备后,内置SD卡上的数据就全部被加密了,这部分主要用来保护通讯录及短信隐私.加密设备后,刷机恢复出厂设置都无法解密数据. 加密外置SD卡 加密外置SD卡可保护SD卡上的所有数据,这部分数据主要用来保护用户的一些图片.隐私文件,可防止艳照门.加密后的SD卡,如果没有解密,即使取出都是无法读取卡内内容的,同样,刷机.恢复出厂