Обрезать изображение фиксированного размера в Android
Я пытаюсь обрезать изображение, но я хочу, чтобы урезанная область была ровно 640px x 640px. Я хочу, чтобы пользователь не обрезался до действительно небольшой области. Поэтому в основном я предпочел бы иметь фиксированную высоту и ширину для области обрезки. Я просмотрел несколько сторонних библиотек, но не вижу решения этой проблемы. Как я могу это сделать?
![enter image description here]()
Ответы
Ответ 1
Я бы использовал одно из этих решений:
Оба, кажется, подходят для решения вашей проблемы и наверняка охватывают более крайние случаи, устройства и другие вещи Android, чтобы быть более стабильными и надежными.
РЕДАКТИРОВАТЬ:
Я ввел несколько изменений в android-crop
, и теперь вы можете использовать withFixedSize(int width, int height)
для установки фиксированной области обрезки в пикселях.
Выглядит так:
private void beginCrop(Uri source) {
Uri outputUri = Uri.fromFile(new File(getCacheDir(), "cropped"));
new Crop(source).output(outputUri).withFixedSize(640, 640).start(this);
}
Здесь это запрос на растяжение.
Проверьте полный код на моем github https://github.com/mklimek/android-crop/tree/newfeature_fied_size_crop.
После этого вы можете клонировать сборку и добавлять ее в свой проект.
Надеюсь, это поможет вам.
Ответ 2
Существует метод, который вы можете использовать?
private void performCrop(){
try {
//call the standard crop action intent (the user device may not support it)
Intent cropIntent = new Intent("com.android.camera.action.CROP");
//indicate image type and Uri
cropIntent.setDataAndType(selectedImage, "image/*");
//set crop properties
cropIntent.putExtra("crop", "true");
//indicate aspect of desired crop
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
//indicate output X and Y
cropIntent.putExtra("outputX", 640);
cropIntent.putExtra("outputY", 640);
//retrieve data on return
cropIntent.putExtra("return-data", true);
//start the activity - we handle returning in onActivityResult
startActivityForResult(cropIntent, PIC_CROP);
}
catch(ActivityNotFoundException anfe){
//display an error message
String errorMessage = "Whoops - your device doesn't support the crop action!";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}
}
Эта часть кода вас интересует:
cropIntent.putExtra("outputX", 640);
cropIntent.putExtra("outputY", 640);
Вы должны вызвать метод обрезки следующим образом:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA && resultCode == RESULT_OK) {
selectedImage = data.getData();
performCrop();
}
if (requestCode == UPLOAD && resultCode == RESULT_OK) {
selectedImage = data.getData();
performCrop();
}
if (requestCode == PIC_CROP && resultCode == RESULT_OK){
Bundle extras = data.getExtras();
//get the cropped bitmap
Bitmap thePic = extras.getParcelable("data");
// Do what you want to do with the pic here
}
}