使用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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!