Quiero recortar una imagen en mi aplicación cuando está seleccionada de la galería.
yo.e si yo lanzamiento de la galería y seleccione una imagen de la ventana de recorte debe venir como cuando seleccionamos una imagen desde el iPhone. Es posible en Android.

He encontrado un tutorial para recortar la imagen en android, pero no parecen de la manera que quería.

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

  • verificar este espero que te ayude.
  • ver mi respuesta espero que lo que usted está buscando, si usted encuentra algún problema o no entender el código, que me haga saber
  • He publicado mi solución [aquí] en stackoverflow post (stackoverflow.com/a/44089387/1448357)
InformationsquelleAutor user1293519 | 2012-05-27

6 Comentarios

  1. 23

    Sí es posible recortar una imagen en android mediante el uso de com.android.camera.action.CROP. después de la cosecha url de la imagen de la galería.usted comenzará Editor de Recorte como:

    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);

    Cuando la imagen seleccione una Actividad de devolución serán seleccionados para guardar el contenido.en 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
    }

    y ver este post que también es de ayuda para el recorte de la imagen en android

    • El com.android.camera.action.CROP acción es parte de la API Interna y por lo tanto no funciona en todos los casos. Sólo quería mencionar que 🙂
    • En los casos en que no va a funcionar ? Cuando el fabricante tiene un legado de la capa ?
    • Esto no funcionará en muchos, muchos dispositivos. Android no tiene un CROP Intent: commonsware.com/blog/2013/01/23/…
    • ¿cómo puedo establecer un mínimo de valor de la escala ? Para decir, quiero que el usuario para mantener la anchura y la altura a menos de 300*300.
    • En mi caso, data.getExtras() devuelve un Bundle de null, entonces ¿cómo podría conseguir el objetivo Bitmap?
    • No funciona en 5.0+ con la aplicación de Fotos (Galería fue eliminado en dispositivos Nexus después de 5.0)
    • entonces, ¿qué usar para hacer croping? y también com.android.camera.action.CROP funciona perfecto en todos los dispositivos , sólo en lenovo no ha funcionado. mostrar brindis que no se puede editar la imagen en virtud de 50×50 ! ¿qué debe hacer?
    • El uso de una biblioteca o aplicar a ti mismo. Como he dicho, la intención es parte de una interna de la API, por lo que no está garantizado para trabajar y no es garantizado para seguir trabajando en el futuro.
    • [email protected] he utilizado la biblioteca para el cultivo . la biblioteca es Yalantis uCrop .Y funciona perfecto.

  2. 21

    Este tutorial es exactamente lo que usted necesita disfrutar de:

    Recoger la imagen de la galería:

    Recorte de una imagen cuando se selecciona desde la galería en android

    Cultivo de la imagen después de la Intención de recogida de acción

    Recorte de una imagen cuando se selecciona desde la galería en android

    Saludos

    • Este trabajó como un encanto , la respuesta perfecta y muy fácil de usar.
    • el tutorial que usted ha descrito aquí no es trabajo para la API>19. Se muestra un error : no se pudo cargar la imagen. Por favor ayudarme a salir de aquí
    • esta no es una buena solución, ya que no funciona en muchos dispositivos, como la Intención no es parte de Android.
  3. 15

    Aunque parte de la API interna, la com.android.camera.action.CROP parece que está bien soportado en la mayoría de los dispositivos Android. Esto podría ayudarle a empezar:

    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);

    Luego manejar lo que usted necesita hacer en el onActivityResult() método de su Activity. El archivo de salida debe ser la imagen recortada.

    Desde este Intent acción es parte de la API interna, sin embargo, me gustaría recomendamos que usted tiene algún tipo de comportamiento de reserva si algún dispositivo no admite la Intent. Algunos fabricantes proporcionan su propia Galería de aplicaciones y así no hay manera de saber si es o no el dispositivo del usuario reconocerá el Intent. POR FAVOR, NO TE OLVIDES DE ESTO!! 🙂

    • De lo que yo estaba buscando era la intención.putExtra(«salida», Uri.fromFile(someOutputFile));
    • Se puede decir, ¿cómo puedo imprimir la recortada (outputX,outputY…) los valores en el logcat
  4. 15

    Ya se puede contar a la Cámara/Galería de Intención para iniciar el cultivo-editor después de que la imagen está seleccionada/tomado de:

    De selección de Imagen de la Galería:

    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);

    Tomar Foto:

    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);
    • Entonces, ¿cómo hacer onActivityResult() correspondientes a los códigos?
    • simple y útil. gracias
    • Cómo obtener la imagen recortada en onActivityResult() ?
    • Trabajando sólo para ACTION_PICK no para IMAGE_CAPTURE
  5. 0

    He resuelto este problema de esta manera,

    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);
        } 
    }

    encontrar mi solución completa aquí en stackoverflow post

  6. 0

    Nadie te dirá qué es necesario, a menos que pruebe que:

       val intent = Intent(Intent.ACTION_PICK)
       intent.apply {
           type = "image/*"
           putExtra("crop", "true") //NOTE: should be string
           putExtra("outputX", 300) //This is needed, editor can't close without these two
           putExtra("outputY", 300) //This is needed
    
           putExtra("scale", true)
           putExtra("aspectX", 1)
           putExtra("aspectY", 1)
           putExtra("return-data", true)
       }
       startActivityForResult(intent, YOUR_INT_CODE)
    • No funciona para mí. ¿Tiene algo especial dentro de onActivityResult() ?

Dejar respuesta

Please enter your comment!
Please enter your name here