package com.michael.doubanonline.util; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.graphics.Bitmap; import android.graphics.BitmapFactory; /** * 在项目中经常会遇到保存网络上的图片或者其他文件到本地中, 如SD卡。这个类能够很方便的实现网络上文件的下载和保存.这里是下载和保存网络上的图片 * */ public class ImageHelper { public ImageHelper() { } /** * @param url * 要下载的文件地址 * @return Bitmap对象 */ public static Bitmap DownloadImageFromNet(String url) { Bitmap bt = null; try { /* * *************** 取得的是byte数组, * 从byte数组生成bitmap*********************** byte[] data = * getImage(filePath); if(data!=null){ bitmap = * BitmapFactory.decodeByteArray(data, 0, data.length);// bitmap * imageView.setImageBitmap(bitmap);// display image }else{ * Toast.makeText(AndroidTest2_3_3.this, "Image error!", 1).show(); * } */ // ******** 取得的是InputStream,直接从InputStream生成bitmap ***********/ bt = BitmapFactory.decodeStream(getImageStream(url)); if (bt != null) { return bt; } } catch (Exception e) { // Toast.makeText(context, "Newwork error!", // Toast.LENGTH_SHORT).show(); e.printStackTrace(); } return null; } /** * 构建输入流 * * @param path * The path of image * @return InputStream * @throws Exception */ public static InputStream getImageStream(String path) throws Exception { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { return conn.getInputStream(); } return null; } /** * 把下载的图片保存到本地,如果已经存在同名的文件,则覆盖。保存的类型是JPEG * * @param bm * Bitmap实例 * @param fileName * 指定图片的名字 * @param savePath * 要把图片保存到的路径 * @throws IOException */ public static void saveFile(Bitmap bm, String fileName, String savePath) throws IOException { if (bm != null) { String SAVE_PATH = savePath; File dirFile = new File(SAVE_PATH); if (!dirFile.exists()) { dirFile.mkdir(); } File myCaptureFile = new File(SAVE_PATH + fileName + ".png"); if (myCaptureFile != null) { // 如果已经存在同名的文件,则覆盖 myCaptureFile.delete(); } BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); bm.compress(Bitmap.CompressFormat.PNG, 100, bos); bos.flush(); bos.close(); } } /** * @param localPath * 本地中文件的路径 如:"mmt/sdcard/userdata/image" * @return Bitmap */ public static Bitmap getLocalImage(String localPath) { Bitmap bm = BitmapFactory.decodeFile(localPath); return bm; } }