在做项目的时候,总是避免不了头像的剪裁和选取,然而4.4以后 以前能够使用的代码 ,也用不了了。 做下记录吧。因为下面代码我用了几次了。
以后直接复制粘贴。
1.拍照 和选择图片
选择图片
<span style="white-space:pre"> </span>intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, GALLERY_REQUEST_CODE);
拍照
<span style="white-space:pre"> </span>intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_REQUEST_CODE);
2.获取系统传来的值
标记符
private static int CAMERA_REQUEST_CODE = 1;
private static int GALLERY_REQUEST_CODE = 2;
private static int CROP_REQUEST_CODE = 3;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST_CODE) {
if (data == null) {
return;
} else { //拍照
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap bm = extras.getParcelable("data");
Uri uri = saveBitmap(bm);
startImageZoom(uri);
}
}
} else if (requestCode == GALLERY_REQUEST_CODE) {
if (data == null) {//相册
return;
}
Uri uri;
uri = data.getData();
Uri fileUri = convertUri(uri);
startImageZoom(fileUri);
} else if (requestCode == CROP_REQUEST_CODE) {
if (data == null) {
return;
}//剪裁后的图片
Bundle extras = data.getExtras();
if (extras == null) {
return;
}
Bitmap bm = extras.getParcelable("data");
ShowImageView(bm);
}
}
图片选取后 根据Url 转成流 并保存
private Uri convertUri(Uri uri) {
InputStream is = null;
try {
is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
return saveBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
保存图片 记得加权限
private Uri saveBitmap(Bitmap bm) {
File tmpDir = new File(Environment.getExternalStorageDirectory()
+ "/xiaoxin");
if (!tmpDir.exists()) {
tmpDir.mkdir();
}
File img = new File(tmpDir.getAbsolutePath() + "love.png");
try {
FileOutputStream fos = new FileOutputStream(img);
bm.compress(Bitmap.CompressFormat.PNG, 85, fos);
fos.flush();
fos.close();
Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_SHORT).show();
return Uri.fromFile(img);
} catch (FileNotFoundException e) {
Toast.makeText(MainActivity.this, "失敗了", Toast.LENGTH_SHORT).show();
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "失敗了", Toast.LENGTH_SHORT).show();
return null;
}
}
3.剪裁图片
/**
* 剪裁图片
*
* @param uri
*/
private void startImageZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_REQUEST_CODE);
}
4.结束语:
记得加权限哦 ,在剪裁完图片后 会有一个 Bitmap 对象。你可以拿来设置到ImageView上面去。也可以直接传送到服务器去。有问题的话 请留言