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不为空,请求相机和请求裁剪该数据都为空,因此才放置临时文件。