Android--图片剪裁
调用系统Intent剪裁图片
/** * 调用系统Intent剪裁图片 * @param context * @param uri * @param w * @param h */ public static void startPhotoZoom(Activity context,Uri uri, int w,int h) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // crop为true是设置在开启的intent中设置显示的view可以剪裁 intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", w); intent.putExtra("aspectY", h); // outputX,outputY 是剪裁图片的宽高 intent.putExtra("outputX", w); intent.putExtra("outputY", h); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(fileName))); intent.putExtra("return-data", false);//若为false则表示不返回数据 context.startActivityForResult(intent, PHOTO_REQUEST_CUT); }
裁剪成正方形图片:
/** * 按正方形裁切图片 */ public static Bitmap ImageCrop(Bitmap bitmap) { if(bitmap == null) return null; int w = bitmap.getWidth(); // 得到图片的宽,高 int h = bitmap.getHeight(); int wh = w > h ? h : w;// 裁切后所取的正方形区域边长 int retX = w > h ? (w - h) / 2 : 0;//基于原图,取正方形左上角x坐标 int retY = w > h ? 0 : (h - w) / 2; //下面这句是关键 Bitmap bit = Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false); return bit; }
裁剪成圆形图片:
/** * 转换图片成圆形 * * @param bitmap * 传入Bitmap对象 * @return */ public static Bitmap toRoundBitmap(Bitmap bitmap) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); float roundPx; float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom; if (width <= height) { roundPx = width / 2; top = 0; bottom = width; left = 0; right = width; height = width; dst_left = 0; dst_top = 0; dst_right = width; dst_bottom = width; } else { roundPx = height / 2; float clip = (width - height) / 2; left = clip; right = width - clip; top = 0; bottom = height; width = height; dst_left = 0; dst_top = 0; dst_right = height; dst_bottom = height; } Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom); final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom); final RectF rectF = new RectF(dst); 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, src, dst, paint); return output; }