Universalimageloader 原图片大小获取

Universalimageloader1.9.5上还没有对外提供获取图片的原大小功能,如果需要获取图片的源大小,可参考stackoverflow上的解决办法
stackoverflow地址

主要实现步骤如下:
1、自定义ImageDecoder

ImageDecoder不需要自己去实现,直接把项目自带的BaseImageDecoder上的代码拷出来即可。

2、定义map存放图片对应的原图大小信息


    //存放源图片大小数据
    protected static final Map<String, ImageSize> sizeMap = Collections.synchronizedMap(new HashMap<String, ImageSize>());

3、在decoder获取到图片大小以及图片信息后,将原图片大小信息保存起来。

public Bitmap decode(ImageDecodingInfo decodingInfo) throws IOException {
        Bitmap decodedBitmap;
        ImageFileInfo imageInfo;

        InputStream imageStream = getImageStream(decodingInfo);
        if (imageStream == null) {
            L.e(ERROR_NO_IMAGE_STREAM, decodingInfo.getImageKey());
            return null;
        }
        try {
            imageInfo = defineImageSizeAndRotation(imageStream, decodingInfo);

            //保存原图片大小信息
            sizeMap.put(decodingInfo.getOriginalImageUri(), imageInfo.imageSize);

            imageStream = resetStream(imageStream, decodingInfo);
            Options decodingOptions = prepareDecodingOptions(imageInfo.imageSize, decodingInfo);
            decodedBitmap = BitmapFactory.decodeStream(imageStream, null, decodingOptions);
        } finally {
            IoUtils.closeSilently(imageStream);
        }

        if (decodedBitmap == null) {
            L.e(ERROR_CANT_DECODE_IMAGE, decodingInfo.getImageKey());
        } else {
            decodedBitmap = considerExactScaleAndOrientatiton(decodedBitmap, decodingInfo, imageInfo.exif.rotation,
             orizontal);
        }
        return decodedtmap;


4、提供公开api给外部调用

    public static ImageSize getOriginSize(String url) {
        return sizeMap.get(url);
    }

5、只需要在需要的地方获取原图大小就可以了,比如在图片显示前或图片加载完成后获取原大小进行操作

  builder.preProcessor(new BitmapProcessor() {
            @Override
            public Bitmap process(Bitmap bitmap) {
                ImageSize imageSize = BaseImageDecoder.getOriginSize(imageurl);
                if (null != imageSize) {
                   //xxxx
                } else {
                  //xxxxxxx
                }
                return bitmap;
            }
        });
posted @ 2016-08-03 15:25  小小架构师  阅读(128)  评论(0编辑  收藏  举报