安卓 图片裁剪

wang823671429 2018-01-19 11:01:37
图片可以移动放缩小 裁剪框也随着放大缩小 裁剪框可以触摸四个顶点放大缩小和移动
...全文
1016 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Android小码家 2018-02-24
  • 打赏
  • 举报
回复
compile 'com.soundcloud.android:android-crop:1.0.1@aar' 希望能帮到你
Jing丶無雙 2018-01-24
  • 打赏
  • 举报
回复
以前自己做的,找个按钮调用startPhotoZoom方法即可
	/**
	 * 调用系统裁剪功能
	 */
	public void startPhotoZoom(Bitmap bitmap, int requestCode) {
		String str = MediaStore.Images.Media.insertImage(getContentResolver(),
				bitmap, null, null);
		Intent intent = new Intent("com.android.camera.action.CROP");
		if (TextUtils.isEmpty(str)) {// 大神酷派
			File file = getBitMapFile(bitmap);
			str = file.getPath();
			intent.setDataAndType(Uri.fromFile(file), "image/*");
		} else {
			Uri uri = Uri.parse(str);
			intent.setDataAndType(uri, "image/*");
		}
		// crop为true是设置在开启的intent中设置显示的view可以剪裁
		intent.putExtra("crop", "true");
		// aspectX aspectY 是宽高的比例
		intent.putExtra("aspectX", 1);
		intent.putExtra("aspectY", 1);
		// outputX,outputY 是剪裁图片的宽高
		intent.putExtra("outputX", 120);
		intent.putExtra("outputY", 120);
		intent.putExtra("return-data", true);
		intent.putExtra("noFaceDetection", true);
		startActivityForResult(intent, requestCode);
	}
	/**
	 * BitMap转File
	 */
	private File getBitMapFile(Bitmap bitmap) {
		File file;
		try {
			Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(
					getContentResolver(), bitmap, null, null));
			String[] proj = { MediaStore.Images.Media.DATA };
			Cursor actualimagecursor = managedQuery(uri,
					proj, null, null, null);
			int actual_image_column_index = actualimagecursor
					.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
			actualimagecursor.moveToFirst();
			String img_path = actualimagecursor
					.getString(actual_image_column_index);
			file = new File(img_path);
		} catch (Exception e) {
			// http://blog.csdn.net/zhoudailiang/article/details/48055869
			Log.d("大神F2", "MediaStore.Images.Media.insertImage  null");
			File openFile = new File(Environment.getExternalStorageDirectory()
					+ "/DCIM/Camera/");
			openFile.mkdirs();// 尝试创建系统默相册文件夹
			String image_Path = Environment.getExternalStorageDirectory()
					+ "/DCIM/Camera/" + getCurrentTime() + ".jpg";// 将要保存图片的路径
			file = new File(image_Path);
			try {
				BufferedOutputStream bos = new BufferedOutputStream(
						new FileOutputStream(file));
				bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
				bos.flush();
				bos.close();
			} catch (Exception e1) {
				Log.d("大神F2", e1.toString());
			}
		}
		return file;
	}
	/**
	 * 得到当前系统的时间
	 **/
	private String getCurrentTime() {
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss");
		String str = format.format(new Date());
		return str;

	}
	/**
	 * 返回裁剪处理
	 **/
	public Bitmap resultPhotoZoom(Intent data, int resultCode, Bitmap bitmap) {
		switch (resultCode) {
		case Activity.RESULT_OK: {
			// 此处的用于判断接收的Activity是不是你想要的那个
			try {
				Bundle bundle = data.getExtras();
				if (bitmap != null) {
					if (!bitmap.isRecycled()) {
						bitmap.recycle();
					}
					bitmap = null;
				}
				bitmap = bundle.getParcelable("data");
				return bitmap;
			} catch (Exception e) {
				Log.d("异常", e.toString());
			}

		}
			break;
		case Activity.RESULT_CANCELED:// 取消
			break;
		}
		return bitmap;
	}
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		Log.d("获取位图", requestCode + "***********");
		switch (requestCode) {
		case 3:
			// 返回裁剪处理
			Bitmap	bitmap = resultPhotoZoom(data, resultCode, bitmap);
			if (bitmap != null && resultCode == Activity.RESULT_OK) {
				// 自己的处理逻辑写在这里
				imgView.setImageBitmap(bitmap);
			}
			break;
		default:
			break;
		}
	}

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧