当前位置:   article > 正文

Universalimageloader 原图片大小获取_imageloader加载图片按照原始大小

imageloader加载图片按照原始大小

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

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

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

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


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

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;


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

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

    public static ImageSize getOriginSize(String url) {
        return sizeMap.get(url);
    }
  • 1
  • 2
  • 3
  • 4

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

  builder.preProcessor(new BitmapProcessor() {
            @Override
            public Bitmap process(Bitmap bitmap) {
                ImageSize imageSize = BaseImageDecoder.getOriginSize(imageurl);
                if (null != imageSize) {
                   //xxxx
                } else {
                  //xxxxxxx
                }
                return bitmap;
            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/105817
推荐阅读
相关标签
  

闽ICP备14008679号