android图片处理工具类

jopen 6年前

public byte[] getPhotoWithPath(String filePath) {      String SDPath = Environment.getExternalStorageDirectory() + "/";    String path = SDPath + filePath;      // 根据路径获取图片    File mfile = new File(path);    if (mfile.exists()) {// 若该文件存在     Bitmap bmp = BitmapFactory.decodeFile(path);     return decodeBitmap(bmp);    } else {     Log.e("PrintTools_58mm", "the file isn't exists");    }    return null;   }     /**    * print photo in assets 打印assets里的图片    *     * @param 图片在assets目录    *            ,如:pic.bmp    * */   public byte[] getPhotoInAssets(Context context, String fileName) {      AssetManager asm = context.getResources().getAssets();    InputStream is;    try {     is = asm.open(fileName);     Bitmap bmp = BitmapFactory.decodeStream(is);     is.close();     if (bmp != null) {      byte[] command = decodeBitmap(bmp);      return command;     } else {      Log.e("PrintTools", "the file isn't exists");     }    } catch (IOException e) {     e.printStackTrace();     Log.e("PrintTools", "the file isn't exists");    }    return null;   }          /**    *     * @param bitmap    * @param widthScale 宽度缩放比例    * @param hightScale 长度缩放比例    * @return    */   public static Bitmap scale(Bitmap bitmap,float widthScale,float hightScale) {    Matrix matrix = new Matrix();    matrix.postScale(widthScale, hightScale); // 长和宽放大缩小的比例    Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),      bitmap.getHeight(), matrix, true);    return resizeBmp;   }        /** */     /**     * 图片去色,返回灰度图片     *      * @param bmpOriginal 传入的图片     * @return 去色后的图片     */     public static Bitmap toGrayscale(Bitmap bmpOriginal) {      int width, height;      height = bmpOriginal.getHeight();      width = bmpOriginal.getWidth();      Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);      Canvas c = new Canvas(bmpGrayscale);      Paint paint = new Paint();      ColorMatrix cm = new ColorMatrix();      cm.setSaturation(0);      ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);      paint.setColorFilter(f);      c.drawBitmap(bmpOriginal, 0, 0, paint);      return bmpGrayscale;      }             /**     * 读取路径中的图片,然后将其转化为缩放后的bitmap     *      * @param path     */     public static void saveBefore(String path) {      BitmapFactory.Options options = new BitmapFactory.Options();      options.inJustDecodeBounds = true;      // 获取这个图片的宽和高      Bitmap bitmap = BitmapFactory.decodeFile(path, options); // 此时返回bm为空      options.inJustDecodeBounds = false;      // 计算缩放比      int be = (int)(options.outHeight / (float)200);      if (be <= 0)      be = 1;      options.inSampleSize = 2; // 图片长宽各缩小二分之一      // 重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦      bitmap = BitmapFactory.decodeFile(path, options);      int w = bitmap.getWidth();      int h = bitmap.getHeight();      System.out.println(w + " " + h);      // savePNG_After(bitmap,path);      saveJPGE_After(bitmap, path);      }      /**     * 保存图片为PNG     *      * @param bitmap     * @param name     */     public static void savePNG_After(Bitmap bitmap, String name) {      File file = new File(name);      try {      FileOutputStream out = new FileOutputStream(file);      if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)) {      out.flush();      out.close();      }      } catch (FileNotFoundException e) {      e.printStackTrace();      } catch (IOException e) {      e.printStackTrace();      }      }      /**     * 保存图片为JPEG     *      * @param bitmap     * @param path     */     public static void saveJPGE_After(Bitmap bitmap, String path) {      File file = new File(path);      try {      FileOutputStream out = new FileOutputStream(file);      if (bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)) {      out.flush();      out.close();      }      } catch (FileNotFoundException e) {      e.printStackTrace();      } catch (IOException e) {      e.printStackTrace();      }      }      /**     * 水印     *      * @param bitmap     * @return     */     public static Bitmap createBitmapForWatermark(Bitmap src, Bitmap watermark) {      if (src == null) {      return null;      }      int w = src.getWidth();      int h = src.getHeight();      int ww = watermark.getWidth();      int wh = watermark.getHeight();      // create the new blank bitmap      Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图      Canvas cv = new Canvas(newb);      // draw src into      cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入src      // draw watermark into      cv.drawBitmap(watermark, w - ww + 5, h - wh + 5, null);// 在src的右下角画入水印      // save all clip      cv.save(Canvas.ALL_SAVE_FLAG);// 保存      // store      cv.restore();// 存储      return newb;      }      /**     * 图片合成     *      * @return     */     public static Bitmap potoMix(int direction, Bitmap... bitmaps) {      if (bitmaps.length <= 0) {      return null;      }      if (bitmaps.length == 1) {      return bitmaps[0];      }      Bitmap newBitmap = bitmaps[0];      // newBitmap = createBitmapForFotoMix(bitmaps[0],bitmaps[1],direction);      for (int i = 1; i < bitmaps.length; i++) {      newBitmap = createBitmapForFotoMix(newBitmap, bitmaps[i], direction);      }      return newBitmap;      }           private static Bitmap createBitmapForFotoMix(Bitmap first, Bitmap second, int direction) {      if (first == null) {      return null;      }      if (second == null) {      return first;      }       int fw = first.getWidth();      int fh = first.getHeight();      int sw = second.getWidth();      int sh = second.getHeight();      Bitmap newBitmap = null;      if (direction == LEFT) {      newBitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh, Config.ARGB_8888);      Canvas canvas = new Canvas(newBitmap);      canvas.drawBitmap(first, sw, 0, null);      canvas.drawBitmap(second, 0, 0, null);      } else if (direction == RIGHT) {      newBitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh, Config.ARGB_8888);      Canvas canvas = new Canvas(newBitmap);      canvas.drawBitmap(first, 0, 0, null);      canvas.drawBitmap(second, fw, 0, null);      } else if (direction == TOP) {      newBitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh, Config.ARGB_8888);      Canvas canvas = new Canvas(newBitmap);      canvas.drawBitmap(first, 0, sh, null);      canvas.drawBitmap(second, 0, 0, null);      } else if (direction == BOTTOM) {      newBitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh, Config.ARGB_8888);      Canvas canvas = new Canvas(newBitmap);      canvas.drawBitmap(first, 0, 0, null);      canvas.drawBitmap(second, 0, fh, null);      }      return newBitmap;      }      /**     * 将Bitmap转换成指定大小     * @param bitmap     * @param width     * @param height     * @return     */     public static Bitmap createBitmapBySize(Bitmap bitmap,int width,int height)      {      return Bitmap.createScaledBitmap(bitmap, width, height, true);      }      /**     * Drawable 转 Bitmap     *      * @param drawable     * @return     */     public static Bitmap drawableToBitmapByBD(Drawable drawable) {      BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;      return bitmapDrawable.getBitmap();      }      /**     * Bitmap 转 Drawable     *      * @param bitmap     * @return     */     public static Drawable bitmapToDrawableByBD(Bitmap bitmap) {      Drawable drawable = new BitmapDrawable(bitmap);      return drawable;      }      /**     * byte[] 转 bitmap     *      * @param b     * @return     */     public static Bitmap bytesToBimap(byte[] b) {      if (b.length != 0) {      return BitmapFactory.decodeByteArray(b, 0, b.length);      } else {      return null;      }      }      /**     * bitmap 转 byte[]     *      * @param bm     * @return     */     public static byte[] bitmapToBytes(Bitmap bm) {      ByteArrayOutputStream baos = new ByteArrayOutputStream();      bm.compress(Bitmap.CompressFormat.PNG, 100, baos);      return baos.toByteArray();      }       }