package com.taobao.tae.Mshopping.demo.util; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.util.Log; import org.apache.commons.io.FileUtils; import java.io.*; /** * mulou.zzy * taedemo */ public class BitmapUtil { public static String tempPathPrefix = Environment.getExternalStorageDirectory() + "/formats/tmp/"; public static String saveBitmap(Bitmap bm, String picName, String tmpPathSuffix) { String dir = tempPathPrefix + tmpPathSuffix; Log.w("", String.format("保存图片, dir : %s, picName : %s", dir, picName)); try { if (!isFileExist(tempPathPrefix)) { createSDDir(tempPathPrefix); } if (!isFileExist(dir)) { File tempf = createSDDir(dir); } File f = new File(dir, picName + ".JPEG"); if (f.exists()) { f.delete(); } FileOutputStream out = null; try { out = new FileOutputStream(f); bm.compress(Bitmap.CompressFormat.JPEG, 90, out); out.flush(); } finally { if (out != null) out.close(); } Log.w("", String.format("已经保存 dir : %s, picName : %s", dir, picName)); return f.getAbsolutePath(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } private static boolean isFileExist(String s) { return new File(s).exists(); } public static void rmDir(String dirSuffix) throws IOException { FileUtils.deleteDirectory(new File(tempPathPrefix + dirSuffix)); } public static File createSDDir(String dirName) throws IOException { File dir = new File(dirName); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { System.out.println("createSDDir:" + dir.getAbsolutePath()); System.out.println("createSDDir:" + dir.mkdir()); } return dir; } public static Bitmap revitionImageSize(String path) throws IOException { BufferedInputStream in = new BufferedInputStream(new FileInputStream( new File(path))); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(in, null, options); in.close(); int i = 0; Bitmap bitmap = null; while (true) { if ((options.outWidth >> i <= 1000) && (options.outHeight >> i <= 1000)) { in = new BufferedInputStream( new FileInputStream(new File(path))); options.inSampleSize = (int) Math.pow(2.0D, i); options.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeStream(in, null, options); break; } i += 1; } return bitmap; } }