1.android的图片剪裁
Intent intent = new Intent("com.android.camera.action.CROP"); //要裁剪的图片 File file = new File(Environment.getExternalStorageDirectory(), "/Camera.png"); Uri uri = Uri.fromFile(file); intent.setDataAndType(uri, "image/*"); //指定剪裁的比例,若不设定,则可以任意宽度和高度 // intent.putExtra("aspectX", 1); // intent.putExtra("aspectY", 1); File outFile = new File(Environment.getExternalStorageDirectory(), "/yu.png");//设置裁剪好后保存的图片位置 //设置输出的图片的宽度和高度,注意会强行设置成该大小 // intent.putExtra("outputX", 100); // intent.putExtra("outputY", 100); intent.putExtra("output", Uri.fromFile(outFile)); // intent.putExtra("return-data", true);//好像不设置也可以 startActivity(intent);
2.调用android的选择图片
Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); //或者 intent.setAction(Intent.ACTION_PICK);
返回的是Uri,类似 content://media/external/images/media/9379
根据Uri查找文件所在路径
ContentResolver contentResolver = getContentResolver(); Cursor cursor = null; String[] proj = new String[]{android.provider.MediaStore.Image.Media.DATA}; cursor = contentResolver.query(uri, proj, null, null, null); cursor.moveToFirst(); int index = cursor.getColumnIndex(Media.DATA); String path = cursor.getString(index); String fileType = path.substring(path.lastIndexOf(".") + 1);//文件类型 jpg, gif, jpeg, png, bmp if(cursor != null){ cursor = null; }
此时的path就是所选择的图片所在的SD卡的位置,如 /storage/sdcard0/DCIM/Camera/1352891866908.jpg
3. 请求系统内部拍照功能
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//android.media.action.IMAGE_CAPTURE File temp = new File(Environment.getExternalStorageDirectory(), "temp.png"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(temp)); startActivityForResult(intent, 1);
注意:返回的时候,只有选择图片的返回的 intent.getData不为空,请求相机和请求裁剪该数据都为空,因此才放置临时文件。