package com.example.administrator.searchpicturetool.model;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import com.example.administrator.searchpicturetool.config.API;
import com.facebook.common.references.CloseableReference;
import com.facebook.datasource.DataSource;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipeline;
import com.facebook.imagepipeline.image.CloseableImage;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.jude.utils.JUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
/**
* Created by wenhuaijun on 2016/1/22 0022.
*/
public class SaveBitmapModel {
public static Observable<String> getSaveBitmapObservable(final Bitmap bitmap, Context context) {
Observable<Bitmap> observable = Observable.create(new Observable.OnSubscribe<Bitmap>() {
@Override
public void call(Subscriber<? super Bitmap> subscriber) {
subscriber.onNext(bitmap);
}
});
return observable
.map(new Func1<Bitmap, String>() {
@Override
public String call(Bitmap bitmap) {
String name = "/" + System.currentTimeMillis() + ".png";
File file = new File(API.imgPath);
if (!file.exists()) {
JUtils.Log("!file.exists()");
file.mkdirs();
}
file = new File(API.imgPath + name);
try {
//创建需要保存的图片成功,若未成功则已经有该文件
if (file.createNewFile()) {
FileOutputStream fileOutputStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
//发送广播,让相册更新图片
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file.getPath())));
}
} catch (IOException e) {
e.printStackTrace();
return API.status.error + "";
}
return file.toString();
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public static DataSource<CloseableReference<CloseableImage>> getFrescoDownloadBitmap(Context context, String url) {
ImageRequest imageRequest = ImageRequestBuilder
.newBuilderWithSource(Uri.parse(url))
.setProgressiveRenderingEnabled(true)
.build();
ImagePipeline imagePipeline = Fresco.getImagePipeline();
DataSource<CloseableReference<CloseableImage>>
dataSource = imagePipeline.fetchDecodedImage(imageRequest, context);
return dataSource;
}
public static DataSource<CloseableReference<CloseableImage>> getFrescoCacheBitmap(Context context, String url) {
ImagePipeline imagePipeline = Fresco.getImagePipeline();
if (imagePipeline.isInBitmapMemoryCache(Uri.parse(url)) || imagePipeline.isInDiskCacheSync(Uri.parse(url))) {
ImageRequest imageRequest = ImageRequestBuilder
.newBuilderWithSource(Uri.parse(url))
.setProgressiveRenderingEnabled(true)
.build();
DataSource<CloseableReference<CloseableImage>>
dataSource = imagePipeline.fetchDecodedImage(imageRequest, context);
return dataSource;
}
JUtils.Log("getFrescoCacheBitmap ==null !!");
return null;
}
}