android图片处理方法(不断收集中…

Android 中图片处理方法技巧大汇总,几乎涵盖了所有的图片处理方法!
http://gundumw100.iteye.com/blog/849729

http://www.cnblogs.com/lbangel/p/3612588.html

再奉上一个自己整理的图片处理工具类,里边都是静态方法,可以直接调用就好:
package com.lyc.image.tools;

public class ImageTools {

      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;
      }

   
     
      public static Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) {
            return toRoundCorner(toGrayscale(bmpOriginal), pixels);
      }

   
     
      public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {

            Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                        bitmap.getHeight(), Config.ARGB_8888);
            Canvas canvas = new Canvas(output);

            final int color = 0xff424242;
            final Paint paint = new Paint();
            final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
            final RectF rectF = new RectF(rect);
            final float roundPx = pixels;

            paint.setAntiAlias(true);
            canvas.drawARGB(0, 0, 0, 0);
            paint.setColor(color);
            canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

            paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
            canvas.drawBitmap(bitmap, rect, rect, paint);

            return output;
      }

 
     
      public static BitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable,
                  int pixels) {
            Bitmap bitmap = bitmapDrawable.getBitmap();
            bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap, pixels));
            return bitmapDrawable;
      }

     
      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);
      }

     
      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();
            }
      }

     
      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();
            }
      }

     
      private Bitmap createBitmap(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;
      }

      // 将图片转换成byte[]以便能将其存到数据库
      public static byte[] getByteFromBitmap(Bitmap bitmap) {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            try {
                  out.flush();
                  out.close();
            } catch (IOException e) {
                  e.printStackTrace();
                  // Log.e(TAG, "transform byte exception");
            }
            return out.toByteArray();
      }

      // 得到存储在数据库中的图片
      // eg imageView.setImageBitmap(bitmapobj);
      public static Bitmap getBitmapFromByte(byte[] temp) {
            if (temp != null) {
                  Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length);
                  return bitmap;
            } else {
                  // Bitmap bitmap=BitmapFactory.decodeResource(getResources(),
                  // R.drawable.contact_add_icon);
                  return null;
            }
      }
      //将手机中的文件转换为Bitmap类型
      public static Bitmap getBitemapFromFile(File f) {
            if (!f.exists())
                  return null;
            try {
                  return BitmapFactory.decodeFile(f.getAbsolutePath());
            } catch (Exception ex) {
                  return null;
            }
      }
      //将手机中的文件转换为Bitmap类型(重载+1)
      public static Bitmap getBitemapFromFile(String fileName) {
           
            try {
                  return BitmapFactory.decodeFile(fileName);
            } catch (Exception ex) {
                  return null;
            }
      }

  //压缩图片
  public static void compressBmpToFile(Bitmap bmp,File file){
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                int options = 90;
                bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
                while (baos.toByteArray().length / 1024 > 100) {
                        baos.reset();
                        options -= 10;
                        bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
                }
                try {
                        FileOutputStream fos = new FileOutputStream(file);
                        fos.write(baos.toByteArray());
                        fos.flush();
                        fos.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

ps该方法是压缩图片的质量, 注意它不会减少图片的像素,比方说, 你的图片是300K的, 1280*700像素的, 经过该方法压缩后, File形式的图片是在100以下, 以方便上传服务器, 但是你BitmapFactory.decodeFile到内存中,变成Bitmap时,它的像素仍然是1280*700, 计算图片像素的方法是 bitmap.getWidth()和bitmap.getHeight()。
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值