Подтвердить что ты не робот

Обрезать изображение при выборе из галереи в android

Я хочу обрезать изображение в приложении, когда он выбран из галереи. Если я запустил галерею и выберем изображение, то окно обрезки должно появиться, когда мы выберем изображение с iPhone. Возможно ли это в Android.

Я нашел один учебник для обрезки изображения в андроиде, но не думаю, что хотел.

http://www.coderzheaven.com/2011/03/15/crop-an-image-in-android/

4b9b3361

Ответ 1

Да, возможно обрезать изображение в android с помощью com.android.camera.action.CROP. после выбора URL-адреса изображения из галереи. Вы начнете Редактор Crop:

Intent intent = new Intent("com.android.camera.action.CROP");  
intent.setClassName("com.android.camera", "com.android.camera.CropImage");  
File file = new File(filePath);  
Uri uri = Uri.fromFile(file);  
intent.setData(uri);  
intent.putExtra("crop", "true");  
intent.putExtra("aspectX", 1);  
intent.putExtra("aspectY", 1);  
intent.putExtra("outputX", 96);  
intent.putExtra("outputY", 96);  
intent.putExtra("noFaceDetection", true);  
intent.putExtra("return-data", true);                                  
startActivityForResult(intent, REQUEST_CROP_ICON);

Когда выбрано изображение, для сохранения содержимого будет выбрано "Возврат активности". В onActivityResult:

Bundle extras = data.getExtras();  
if(extras != null ) {  
    Bitmap photo = extras.getParcelable("data");  
    ByteArrayOutputStream stream = new ByteArrayOutputStream();  
    photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);  
        // The stream to write to a file or directly using the photo
}

и см. этот пост, который также поможет вам обрезать изображение в android

Ответ 2

Этот учебник - это именно то, что вам нужно:

Выбор изображения из галереи:

enter image description here

Обрезать изображение после действия выбора намерения

enter image description here

Приветствия

Ответ 3

Несмотря на часть внутреннего API, com.android.camera.action.CROP кажется, что он хорошо поддерживается на большинстве Android-устройств. Это может помочь вам:

final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(uriOfImageToCrop);
intent.putExtra("outputX", 400);
intent.putExtra("outputY", 400);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.fromFile(someOutputFile));
startActivityForResult(intent, SOME_RANDOM_REQUEST_CODE);

Затем обработайте то, что вам нужно сделать в методе onActivityResult() вашего Activity. Ваш выходной файл должен быть обрезанным.

Так как это действие Intent является частью внутреннего API, я бы настоятельно советовал, что у вас есть какое-то резервное поведение, если какое-то устройство не поддерживает Intent. Некоторые производители предоставляют свои собственные приложения для галереи, поэтому нет способа узнать, узнает ли пользовательское устройство Intent. ПОЖАЛУЙСТА, НЕ ЗАБЫВАЙТЕ ЭТО!!:)

Ответ 4

Вы уже можете сообщить программе Camera/Gallery-Intent, чтобы запустить редактор обрезков после того, как изображение выбрано/взято:

Выберите изображение из галереи:

Intent pickImageIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

pickImageIntent.setType("image/*");
pickImageIntent.putExtra("crop", "true");
pickImageIntent.putExtra("outputX", 200);
pickImageIntent.putExtra("outputY", 200);
pickImageIntent.putExtra("aspectX", 1);
pickImageIntent.putExtra("aspectY", 1);
pickImageIntent.putExtra("scale", true);
pickImageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriWhereToStore);
pickImageIntent.putExtra("outputFormat",

Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(pickImageIntent, RESULT_LOAD_IMAGE);

Фото:

Intent takePicIntent = new Intent("android.media.action.IMAGE_CAPTURE");

takePicIntent .putExtra("crop", "true");
takePicIntent .putExtra("outputX", 200);
takePicIntent .putExtra("outputY", 200);
takePicIntent .putExtra("aspectX", 1);
takePicIntent .putExtra("aspectY", 1);
takePicIntent .putExtra("scale", true);
takePicIntent .putExtra(MediaStore.EXTRA_OUTPUT, uriWhereToStore);
takePicIntent .putExtra("outputFormat",

Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(takePicIntent , RESULT_LOAD_IMAGE);

Ответ 5

Я решил эту проблему таким образом

private void pickUserImage() { 

if (doHavePermission()) { 
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    photoPickerIntent.setType("image/*");
    photoPickerIntent.putExtra("crop", "true");
    photoPickerIntent.putExtra("scale", true);
    photoPickerIntent.putExtra("outputX", 256);
    photoPickerIntent.putExtra("outputY", 256);
    photoPickerIntent.putExtra("aspectX", 1);
    photoPickerIntent.putExtra("aspectY", 1);
    photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
    startActivityForResult(photoPickerIntent, PICK_FROM_GALLERY);
    } 
}

найти мое полное решение здесь в postoffflow post