android ---- ImageUtil工具类
jopen
12年前
package com.itcast.util; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.net.URLConnection; import java.security.MessageDigest; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; public class ImageUtil { private static final String SDCARD_CACHE_IMG_PATH = Environment .getExternalStorageDirectory().getPath() + "/itcast/images/"; /** * 保存图片到SD卡 * @param imagePath * @param buffer * @throws IOException */ public static void saveImage(String imagePath, byte[] buffer) throws IOException { File f = new File(imagePath); if (f.exists()) { return; } else { File parentFile = f.getParentFile(); if (!parentFile.exists()) { parentFile.mkdirs(); } f.createNewFile(); FileOutputStream fos = new FileOutputStream(imagePath); fos.write(buffer); fos.flush(); fos.close(); } } /** * 从SD卡加载图片 * @param imagePath * @return */ public static Bitmap getImageFromLocal(String imagePath){ File file = new File(imagePath); if(file.exists()){ Bitmap bitmap = BitmapFactory.decodeFile(imagePath); file.setLastModified(System.currentTimeMillis()); return bitmap; } return null; } /** * Bitmap转换到Byte[] * @param bm * @return */ public static byte[] bitmap2Bytes(Bitmap bm){ ByteArrayOutputStream bas = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 100, bas); return bas.toByteArray(); } /** * 从本地或者服务端加载图片 * @return * @throws IOException */ public static Bitmap loadImage(final String imagePath,final String imgUrl,final ImageCallback callback) { Bitmap bitmap = getImageFromLocal(imagePath); if(bitmap != null){ return bitmap; }else{//从网上加载 final Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { if(msg.obj!=null){ Bitmap bitmap = (Bitmap) msg.obj; callback.loadImage(bitmap, imagePath); } } }; Runnable runnable = new Runnable() { @Override public void run() { try { URL url = new URL(imgUrl); Log.e("图片加载", imgUrl); URLConnection conn = url.openConnection(); conn.connect(); BufferedInputStream bis = new BufferedInputStream(conn.getInputStream(),8192) ; Bitmap bitmap = BitmapFactory.decodeStream(bis); //保存文件到sd卡 saveImage(imagePath,bitmap2Bytes(bitmap)); Message msg = handler.obtainMessage(); msg.obj = bitmap; handler.sendMessage(msg); } catch (IOException e) { Log.e(ImageUtil.class.getName(), "保存图片到本地存储卡出错!"); } } }; ThreadPoolManager.getInstance().addTask(runnable); } return null; } // 返回图片存到sd卡的路径 public static String getCacheImgPath() { return SDCARD_CACHE_IMG_PATH; } public static String md5(String paramString) { String returnStr; try { MessageDigest localMessageDigest = MessageDigest.getInstance("MD5"); localMessageDigest.update(paramString.getBytes()); returnStr = byteToHexString(localMessageDigest.digest()); return returnStr; } catch (Exception e) { return paramString; } } /** * 将指定byte数组转换成16进制字符串 * * @param b * @return */ public static String byteToHexString(byte[] b) { StringBuffer hexString = new StringBuffer(); for (int i = 0; i < b.length; i++) { String hex = Integer.toHexString(b[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } hexString.append(hex.toUpperCase()); } return hexString.toString(); } /** * * @author Mathew * */ public interface ImageCallback{ public void loadImage(Bitmap bitmap,String imagePath); } }