package com.gnod.geekr.tool; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.util.Log; import android.view.View; import android.widget.ImageView; import com.gnod.geekr.R; import com.gnod.geekr.tool.manager.SettingManager; import com.weibo.sdk.android.util.Utility; public class ImageHelper { public static Map<String,String> emotionsMap = new HashMap<String,String>(); public static Bitmap getBitmap(Context context,String fileName) { FileInputStream fis = null; Bitmap bitmap = null; try { String filepath = context.getFilesDir() + File.separator + fileName; File file = new File(filepath); if(file.exists()){ fis = context.openFileInput(fileName); bitmap = BitmapFactory.decodeStream(fis); } } catch (FileNotFoundException e) { Log.e("getImage", e.getMessage()); } catch (OutOfMemoryError e) { Log.e("getImage", e.getMessage()); }finally{ try { fis.close(); } catch (Exception e) { } } return bitmap; } public static void saveImage(Context context, String fileName, Bitmap bitmap, int quality) throws IOException { if(bitmap==null || fileName==null || context==null) return; FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, quality, stream); byte[] bytes = stream.toByteArray(); fos.write(bytes); stream.close(); fos.flush(); fos.close(); } public static String getCacheSize(Context context) { if(context == null) return ""; File dir = context.getFilesDir(); File cacheDir = new File(dir, "CacheImage" + File.separator); if(!cacheDir.exists()){ return ""; } long cacheSize = FileUtils.getDirSize(cacheDir); return FileUtils.formatSize(cacheSize); } /** * 缓存删除, 建议开辟线程调用该方法。 */ public static void clearCache(Context context) { if(context == null) return; File dir = context.getFilesDir(); File cacheDir = new File(dir, "CacheImage" + File.separator); if(!cacheDir.exists()) return; FileUtils.deleteDir(cacheDir, System.currentTimeMillis()); } public static void saveCacheImage(Context context, String fileName, Bitmap bitmap, int quality) throws IOException { if(bitmap==null || fileName==null || context==null) return; File dir = context.getFilesDir(); File cacheDir = new File(dir, "CacheImage" + File.separator); if(!cacheDir.exists()){ cacheDir.mkdir(); } File file = new File(cacheDir, fileName); FileOutputStream fos = new FileOutputStream(file); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, quality, stream); byte[] bytes = stream.toByteArray(); fos.write(bytes); stream.close(); fos.flush(); fos.close(); } public static Bitmap getCacheImage(Context context,String fileName) { FileInputStream fis = null; Bitmap bitmap = null; try { File dir = context.getFilesDir(); File cacheDir = new File(dir, "CacheImage" + File.separator); if(cacheDir.exists()){ File file = new File(cacheDir, fileName); if(file.exists()){ fis = new FileInputStream(file); bitmap = BitmapFactory.decodeStream(fis); } } } catch (FileNotFoundException e) { Log.e("CacheImage", e.getMessage()); } catch (OutOfMemoryError e) { Log.e("CacheImage", e.getMessage()); }finally{ try { if(fis != null) fis.close(); } catch (Exception e) { Log.e("CacheImage", e.getMessage()); } } return bitmap; } public static String compressImage(Context context, String picPath) { BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inJustDecodeBounds = false; opt.inSampleSize = 1; switch (SettingManager.getUploadQuality()) { case SettingManager.QUALITY_HIGHT: return picPath; case SettingManager.QUALITY_MID: opt.inSampleSize = 2; break; case SettingManager.QUALITY_LOW: opt.inSampleSize = 4; break; case SettingManager.QUALITY_AUTO: if(Utility.isWifi(context)) return picPath; opt.inSampleSize = 2; break; } Bitmap bitmap = BitmapFactory.decodeFile(picPath, opt); FileOutputStream output = null; String tempFilePath = getTempUploadFile(context); try { new File(tempFilePath).getParentFile().mkdirs(); new File(tempFilePath).createNewFile(); output = new FileOutputStream(new File(tempFilePath)); } catch (IOException e) { } bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output); if(output != null) { try { output.close(); bitmap.recycle(); } catch (IOException e) { } } return tempFilePath; } private static String getTempUploadFile(Context context) { File dir = context.getFilesDir(); File cacheDir = new File(dir, "CacheImage" + File.separator); return cacheDir.getAbsolutePath() + File.separator + "upload.jpg"; } public static void initEmotion(Context context) { InputStream is; try { is = context.getAssets().open("smiley_des.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuilder sbr = new StringBuilder(); String str; while((str = br.readLine())!= null) { sbr.append(str); } prepareFaceMap(sbr.toString()); } catch (IOException e) { Log.e("error", e.getMessage()); } } private static void prepareFaceMap(String arg) { try { JSONObject root = new JSONObject(arg); JSONArray array = root.getJSONArray("smileyList"); if(array == null || array.length() == 0) return; for(int i=0; i < array.length(); i ++) { JSONObject pair = array.getJSONObject(i); emotionsMap.put(pair.optString("smileyString"), pair.optString("fileName")); } } catch (JSONException e) { Log.e("error", e.getMessage()); } } public static void setVerifiedImage(ImageView view, int type){ if(type == 3 || type == 2 || type == 7){ view.setVisibility(View.VISIBLE); view.setImageResource(R.drawable.ic_verified_blue); } else if(type == 220){ view.setVisibility(View.VISIBLE); view.setImageResource(R.drawable.ic_daren); } else if(type == 0){ view.setVisibility(View.VISIBLE); view.setImageResource(R.drawable.ic_verified); } else { view.setVisibility(View.GONE); } } }