安卓保存bitmap到本地

在用picasso的时候,想把获取的的bitmap保存到本地:

 

Picasso.with(getActivity()).load(imgUrls.get(position)).into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                Log.i(TAG,"load from==>" +from);
                boolean hasSaved = SaveImg.saveImg(bitmap, "每日看看-"+String.valueOf(position)+".jpeg",getActivity());
                if(hasSaved){
                    Toast.makeText(getActivity(),"已保存至相册^.^",Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }
        });
    }

 

可以看到,在上面的onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from);回调方法中可以拿到从url加载图片的bitmap对象,from参数是 标志图片是从哪儿加载的【可以从内存,磁盘,和网络】。
接着调用SaveImg.saveImg方法,下面就来看看是如何保存bitmap的吧:

 

public class SaveImg {

    public static boolean saveImg(Bitmap bitmap, String name, Context context) {
        try {
            String sdcardPath = System.getenv("EXTERNAL_STORAGE");      //获得sd卡路径
            String dir = sdcardPath + "/每日看看/";                    //图片保存的文件夹名
            File file = new File(dir);                                 //已File来构建
            if (!file.exists()) {                                     //如果不存在  就mkdirs()创建此文件夹
                file.mkdirs();
            }
            Log.i("SaveImg", "file uri==>" + dir);
            File mFile = new File(dir + name);                        //将要保存的图片文件
            if (mFile.exists()) {
                Toast.makeText(context, "该图片已存在!", Toast.LENGTH_SHORT).show();
                return false;
            }

            FileOutputStream outputStream = new FileOutputStream(mFile);     //构建输出流
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);  //compress到输出outputStream
            Uri uri = Uri.fromFile(mFile);                                  //获得图片的uri
            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); //发送广播通知更新图库,这样系统图库可以找到这张图片
            return true;

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return false;
    }
}

多学一招:
首先文件夹得存在,比如将a.jpeg保存到   sdcard/每日看看/  文件夹里  ,跟上面一样,要判断文件夹存不存在,不存在就要mkdirs()创建它:

 

 

 

 

 File root = new File("sdcard/每日看看/");
            if (!root.exists()) {
                root.mkdirs();
            }
            File a = new File("sdcard/每日看看/a.jpeg");
            FileOutputStream out = new FileOutputStream(a);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)

如果只是将a.jpeg保存到sd卡的根目录:

 

 

File mFile = new File("sdcard/a.jpeg");
    FileOutputStream mFileOutputStream = new FileOutputStream(mFile);
    bitmap.compress(Bitmap.CompressFormat.JPEG,100,outputStream); 

okay...
 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值