`
lvwenwen
  • 浏览: 931172 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

获取网络图片工具类

阅读更多

package com.soarsky.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ref.SoftReference;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;

public class AsyncImageLoader {
private HashMap<String, SoftReference<Drawable>> imageCache;
    public AsyncImageLoader() {
            imageCache = new HashMap<String, SoftReference<Drawable>>();
        }
    
    /**
     * 获取远程图片方法
     * @param imageUrl 图片远程路径 如:http://hiphotos.baidu.com/zz%B7%E7%B2%D0/pic/item/f8e68dfc5c15f6476c22ebb0.jpg
     * @param imageCallback  回调方法
     * @return drawable 图片
     */
    public Drawable loadDrawable(final String imageUrl, final ImageCallback imageCallback) {
            if (imageCache.containsKey(imageUrl)) {
                SoftReference<Drawable> softReference = imageCache.get(imageUrl);
                Drawable drawable = softReference.get();
                //缓存中存在,则使用缓存中的图片
                if (drawable != null) {
                    return drawable;
                }
            }
            //handler调用 获取图片方法
            final Handler handler = new Handler() {
                public void handleMessage(Message message) {
                    imageCallback.imageLoaded((Drawable) message.obj, imageUrl);
                }
            };
           
            //建立线程获取图片
            new Thread() {
                @Override
                public void run() {
                    Drawable drawable = loadImageFromUrl(imageUrl);
                    //如果获取图片不为空,则存入缓存
                    if(drawable != null){
                      imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
                    }
                    Message message = handler.obtainMessage(0, drawable);
                    handler.sendMessage(message);
                }
            }.start();
           
            return null;
        }
   /**
    * 获取图片方法,添了了线程同步 
    * @param url 图片路径
    * @return
    */
   public synchronized static Drawable loadImageFromUrl(String url) {
      Bitmap bitmap = null;
           URL m = null;
           InputStream i = null;
           Drawable d = null;
           try {
               m = new URL(url);
               i = (InputStream) m.getContent();
           } catch (MalformedURLException e1) {
               e1.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           }
          
          if(m != null) {
          //图片大小大于300k时显示为原图1/4
         if(m.getFile().length() > 300 * 1024){
        
     BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
     //bitmapOptions.inJustDecodeBounds = true;
     //设置图片长宽为原图的1/2
         bitmapOptions.inSampleSize = 2;
         bitmap = BitmapFactory.decodeStream(i, null , bitmapOptions);
         }else{
         bitmap = BitmapFactory.decodeStream(i);
         }
          }
         
          if(i != null){
          try {
i.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
          }
         
          if(bitmap != null) {
         d = new BitmapDrawable(bitmap);
          }
           return d;
       }
    
   public interface ImageCallback {
            public void imageLoaded(Drawable imageDrawable, String imageUrl);
        }
  
   //待用方法
   public byte[] readInputStream(InputStream is) { 
       ByteArrayOutputStream baos=new ByteArrayOutputStream(); 
       byte[] buffer=new byte[1024]; 
       int length=-1; 
       try { 
           while((length=is.read(buffer))!=-1){ 
               baos.write(buffer, 0, length); 
           } 
           baos.flush(); 
       } catch (IOException e) { 
           e.printStackTrace(); 
       } 
       byte[] data=baos.toByteArray(); 
       try { 
           is.close(); 
           baos.close(); 
       } catch (IOException e) { 
           e.printStackTrace(); 
       } 
       return data; 
   } 
  
}
分享到:
评论

相关推荐

    网络获取图片工具

    网络获取图片工具类AsyncImageLoader

    对网络获取的图片进行保存工具类

    保存网络图片,将获取的字节数组保存为文件写入硬盘,获取远程http地址视图片,读取流

    通过url获取网络位置上的文件流

    java通过url获取网络位置上的文件流,自己封装的工具类

    android 开发常用工具类集合

    图片工具类 屏幕工具类 存储工具类 正则校验工具类 String工具类 Toast工具类 自定义圆形imageView (CircleImageView) 自定义loadingDialog 自定义带旋转动画的loadingDialog 2018.10.27 修改Toast工具...

    自己收集整理的一些常用的工具类

    DeviceStatusUtils 手机状态工具类 主要包括网络、蓝牙、屏幕亮度、飞行模式、音量等 DigestUtils DigestUtils FileUtils 文件操作 HanziToPinyin 拼音汉字处理 IOUtils IOUtils MD5 MD5 MiscUtils 设备信息的获取 ...

    史上最全的Java工具类

    史上最全的Java工具类,包括http访问,发送短信验证码,拼音转孩子,android图片压缩,android上传下载文件,android访问网络,MD5,json解析和生成json串,编码,SDcard工具类,android信息获取,mysql连接工具,sql...

    EGOImageView获取网络图片

    异步下载图片 非常好用的一款第三方工具类

    网络请求工具类

    二次封装了volley,关于加载图片并缓存,获取网络请求,并集成了xml转换

    android常用工具类

    压缩包包括如下内容 1.AppInfoUtils.java 应用信息相关...5.ImageUtils.java 图片相关 6.NetworkUtil.java 网络相关 7.NumberVerifyUtil.java 数字相关 8.ScreenWindowUtils.java 屏幕项目 9.Validator.java 正则表验证

    java开发工具类(常用)

    对于日期,随机字符,时间差计算,拼音转换,金额计算转换,网络图片保存,身份证出生日期获取,字符串首字母获取,年月加减计算等

    Android静默安装常用工具类

    图片工具类,可用于Bitmap, byte array, Drawable之间进行转换以及图片缩放,目前功能薄弱,后面会进行增强。如: bitmapToDrawable(Bitmap b) bimap转换为drawable drawableToBitmap(Drawable d) drawable转换为...

    我用到的python 所有的工具类(爬虫 、图片处理).zip

    为此,我们汇集了一系列Python爬虫工具,旨在帮助您更高效地获取、处理和分析网络数据。 内容概览 这个压缩包集合包括了从单一用途到多功能的各种Python爬虫工具。无论您是需要快速抓取特定网站的数据,还是希望...

    集成目前Android主流优秀第三方组件

    网络操作工具类(ToolNetwork.java),获取网络信息、更改切换网络等相关操作 日期操作工具类(ToolDateTime.java),获取日期、日期加减、格式化日期、日期转换等操作 XML操作工具类(ToolXml.java),基于DOM/...

    Android集成主流优秀第三方组件框架

    网络操作工具类(ToolNetwork.java),获取网络信息、更改切换网络等相关操作 日期操作工具类(ToolDateTime.java),获取日期、日期加减、格式化日期、日期转换等操作 XML操作工具类(ToolXml.java),基于DOM/...

    Java中Http请求的工具类

    获取网络图片返回byte数组 向指定 URL 发送POST方法的请求 向指定URL发送POST方法的请求(application/json格式发送数据) 向指定URL发送POST方法的请求(application/xml格式发送数据) 上传图片

    Android例子源码集成安卓主流优秀第三方组件框架.zip

    网络操作工具类(ToolNetwork.java),获取网络信息、更改切换网络等相关操作 日期操作工具类(ToolDateTime.java),获取日期、日期加减、格式化日期、日期转换等操作 XML操作工具类(ToolXml.java),基于DOM/...

    集成安卓主流优秀第三方组件框架.zip

    网络操作工具类(ToolNetwork.java),获取网络信息、更改切换网络等相关操作 日期操作工具类(ToolDateTime.java),获取日期、日期加减、格式化日期、日期转换等操作 XML操作工具类(ToolXml.java),基于DOM/...

    使用EasyPOI导出Excel模板数据(含图片)博文源码

    博文《使用EasyPOI导出Excel模板数据(含图片)》所含源码,应众多网友要求放出来。包含测试类、导出工具类、图像工具类、Excel模板

    图片批量下载工具eGet 2010

    eGet用于对指定的网站, 或者任意网页地址进行分析, 并批量下载需要的文件(如图片, MP3,视频文件等等). eGet的下载速度非常快,并且支持...访问产品主页获取更多信息: http://www.bainsoft.com/cn/database/eGet.html

    Java调用百度图像识别接口

    前三步和人脸检测几乎一样 人脸检测地址 ...第四步 Token和工具类准备完毕,写图片识别代码 识别图片 PictureRecognition类 import java.net.URLEncoder; /** * 通用物体和场景识别 */ public class Pictu

Global site tag (gtag.js) - Google Analytics