在用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...