使用Fresco Processor處理圖片
使用Fresco Processor處理圖片
最近把蝌蚪音客的圖片展現框架由Picasso切換到Fresco,因為Fresco使用的是公共內存區,所以切換之后的效果還是很明顯的,之前app的內存占用在60MB左右,切換到Fresco后降低了將近一半。
因為蝌蚪音客用到了圖片預處理功能,如下圖:
為了減少dom個數,作品封面左下角的小圖標是在圖片展現時通過Bitmap繪制上去的。之前Picasso是用transform來處理,Fresco對應的功能是通過Processor來實現的。
感覺Fresco的這個功能沒有Picasso封裝的方便,Picasso的transform可以支持多個,這樣的話如果一個圖片需要處理多次,可以通過
Picasso.with(ctx).load(path).transform(new AudioTransform()).transform(new FeaturTransform()).into(imageView);
的方式來實現,但是Fresco不支持這種方式,所以這里對官方的Processor進行了封裝
public interface ProcessorInterface {
public void process(Bitmap bitmap);
}
public class TuoFrescoProcessor extends BaseRepeatedPostProcessor {
private ArrayList<ProcessorInterface> processorList = new ArrayList<>();
public TuoFrescoProcessor addProcessor(ProcessorInterface processor) {
this.processorList.add(processor);
return this;
}
@Override
public void process(Bitmap bitmap) {
for (int i = 0; i < processorList.size(); i++) {
processorList.get(i).process(bitmap);
}
}
}這樣的話,不同的處理效果就可以放到不同的類中去實現,做到相互獨立。
這里給出一個ProcessorInterface的實現
public class OpusTypeProcessor implements ProcessorInterface {
private Paint paint;
private Context mContext;
public OpusTypeProcessor(Context mContext) {
this.mContext = mContext.getApplicationContext();
paint = new Paint();
}
@Override
public void process(Bitmap bitmap) {
Canvas canvas = new Canvas(bitmap);
//對bitmap進行處理
canvas.drawBitmap(bitmap,*,*,*,paint);
}
}最后給出的是TuoFrescoProcessor的使用代碼
TuoFrescoProcessor processor = new TuoFrescoProcessor();
//標識作品類型
if (opusInfo.getOpusType() == TuoConstants.OPUS_TYPE.AUDIO || opusInfo.getOpusType() == TuoConstants.OPUS_TYPE.VIDEO) {
OpusTypeProcessor opusTypeProcessor = new OpusTypeProcessor(context);
opusTypeProcessor.setOpusType(opusInfo.getOpusType());
processor.addProcessor(opusTypeProcessor);
}
//標識作品是否加精
if (opusInfo.getIsFeatured()) {
FeatureProcessor featureProcessor = new FeatureProcessor(context, FeatureProcessor.SOURCE_TYPE_GRID_GROUP);
featureProcessor.setEnable(true);
processor.addProcessor(featureProcessor);
}
//圖片展示
ImageRequest frescoRequest = ImageRequestBuilder.newBuilderWithSource(imagePath))
.setPostprocessor(processor)
.build();
simpleDraweeView.setController(Fresco.newDraweeControllerBuilder()
.setImageRequest(frescoRequest)
.setOldController(simpleDraweeView.getController())
.build());其實七牛等文件服務器都提供了水印等功能,現在正在考慮將一部分圖片處理交給七牛去做,這樣的話客戶端只要當做普通圖片請求就可以了,可以減少客戶端的性能壓力。這部分還沒有完成,稍后會有文章給出。
來自:https://www.zybuluo.com/lichangadd/note/141487
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!