Я предлагаю вам использовать эту библиотеку Android-Image-Cropper от ArthurHub , она дает вам множество вариантов обрезки (форма, размер, ....), а также дает вам выбор взять новую фотографию или использовать ее из галереи
int myColor;
if(Build.VERSION.SDK_INT >= 21){
myColor = ContextCompat.getColor(this, R.color.white);
}
else{
myColor=getResources().getColor(R.color.white);
}
CropImage.activity()
.setActivityMenuIconColor(myColor)
.setAllowRotation(true)
.setFixAspectRatio(true)
.setAspectRatio(3, 2)
.setCropShape(CropImageView.CropShape.RECTANGLE)
.setActivityTitle("Selection d'image")
.start(this);
и вы должны обработать результат:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode== CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
Uri resultUri = result.getUri();
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), resultUri);
String string = resultUri.toString();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, baos);
} catch (IOException e) {
e.printStackTrace();
}
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}