Cómo guardar una imagen en Android Studio

12
9947
tutoriales android studio

En este nuevo tutorial rápido veremos cómo guardar una imagen en Android Studio. De esta manera, nuestra app lo que hará será guardar una imagen en la tarjeta de nuestro dispositivo o memoria interna. Ideal para las aplicaciones que muestran imágenes y que permiten a los usuarios guardarlas en sus smartphones o simplemente tomar fotos y poder guardarlas, según se desee en una nueva carpeta, que se creará con el nombre que nosotros queramos. Te mostramos un ejemplo completo a continuación de cómo puedes implementarlo en Android Studio.

Cómo guardar una imagen en Android Studio

Para guardar una imagen en tu smartphone o en el del usuario que ejecute la app, necesitas una clase que se llame “Save” por ejemplo, que luego llamemos desde la Activity. Puedes tomar este código que nos ha proporcionado un compañero de Stack Overflow y funciona.

  • Lo primero será crear la clase Save.

En NameOfFolder (línea 4), tendrás que especificar cómo quieres que se llame la carpeta que se le creará al usuario para guardar las imágenes de la aplicación. Puedes llamarle como quieras, o el nombre de tu app, por ejemplo. Cuando el usuario guarde la primera imagen de tu app, se le creará en memoria esa carpeta. Luego, automáticamente todas se guardarán en esa misma carpeta. Si no especificas una ruta concreta, se creará en la raíz. Lo mismo para NameOfFile, podrás llamarle como quieras.

  • Lo segundo será llamar a la clase Save desde la Activity en cuestión.
  Cómo recuperar archivos borrados en Android

Ahora, desde la Activity que quieras, tendrás que copiar y pegar el siguiente trozo de código para que guarde la imagen. Puedes implementarlo dentro de un diálogo por ejemplo, o cuando se mantenga pulsado sobre la imagen. Lo primero será convertirla a bitmap, aquí te contamos cómo convertir imageView a Bitmap:

Con este código, podremos primero convertir la imagen a bitmap y luego guardar la imagen. Puede que no necesites hacer todo el procedimiento, pero si tienes preguntas sobre cómo guardar imágenes en Android Studio, puedes preguntarnos.

Con este ejemplo, si tienes una app que muestra imágenes de “algo”, el usuario podrá guardarlas dónde implementes la opción de guardar (savefile en nuestro ejemplo). Con la clase Save y su llamada en la Activity correspondiente, conseguirás que se guarde la imagen con ese determinado id. ¡Funciona!

  Cómo personalizar listas (ListView) en Android Studio

Una forma de hacerlo, es mediante un diálogo por ejemplo, que al hacer clic encima de la imagen se muestren varias opciones y entre ellas guardar. Otra opción, es manteniendo pulsado y que se guarde automáticamente. Simplemente, elige la opción que te guste y copia y pega el código anterior en ella.

Ejemplo – Guarda una imagen manteniendo pulsado

¿Ya sabes cómo guardar una imagen en Android Studio? No dudes en preguntarnos en los comentarios.

12 Comentarios

  1. Hola, me gustaría saber como podria guardar las imagenes directamente en la Raiz C o en una carpeta que no requiera acceso root?

  2. Hola buenos días, me gustaría saber como guardar las imágenes u otros archivos en una carpeta de la memoria interna del teléfono que no sea la de la app, es decir una carpeta permanente, como por ejemplo la de Downloads.

  3. Hola, no me guarda la imagen, me muestra: ¡No se ha podido guardar la imagen!
    Estaría muy agradecido por su ayuda.

    Adjunto código:

    public void onClickDescargar(View view) {
    foto.buildDrawingCache();
    Bitmap bm=foto.getDrawingCache();

    String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() + NameOfFolder;
    String CurrentDateAndTime = getCurrentDateAndTime();
    File dir = new File(file_path);

    if (!dir.exists()) {
    dir.mkdirs();
    }

    File file = new File(dir, NameOfFile + CurrentDateAndTime + “.jpg”);

    try {
    FileOutputStream fOut = new FileOutputStream(file);

    bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
    fOut.flush();
    fOut.close();
    MakeSureFileWasCreatedThenMakeAvabile(file);
    AbleToSave();
    }

    catch(FileNotFoundException e) {
    UnableToSave();
    }
    catch(IOException e) {
    UnableToSave();
    }

    }

    private void MakeSureFileWasCreatedThenMakeAvabile(File file){
    MediaScannerConnection.scanFile(this,
    new String[] { file.toString() } , null,
    new MediaScannerConnection.OnScanCompletedListener() {

    public void onScanCompleted(String path, Uri uri) {
    }
    });
    }

    private void UnableToSave() {
    Toast.makeText(this, “¡No se ha podido guardar la imagen!”, Toast.LENGTH_SHORT).show();
    }

    private void AbleToSave() {
    Toast.makeText(this, “Imagen guardada en la galeria.”, Toast.LENGTH_SHORT).show();
    }

  4. Buenos tardes, Gracias por la ayuda…

    mi problema es que la imagen no aparece en la aplicación Galeria, la imagen se almacena correctamente en la ruta que es, pero cuando trato de visualizarla desde Galería no aparece el folder con la imagen y pues para que aparezca tengo que reiniciar el celular y pues no se a que se deba… ya intente con otros celulares y pasa igual..

    y el directorio lo estoy declarando publico para que otras aplicaciones puedan acceder a las imágenes….

  5. Ya lo probe y si funciona, solo te faltó decir que en el Manifest se deben agregar la sgtes Lineas:

    Otro punto es que al guardar, crea la carpeta y pone la imagen, pero más que la imagen es como si le tomara foto porque al ver la foto en la pc, aparece el fondo negro y el molde del celular

    • Hola! Cuando yo declaro el:
      imagen.setOnLongClickListener(new View.OnLongClickListener() {

      @Override
      public boolean onLongClick(View arg0) {

      //convertir imagen a bitmap
      imagen.buildDrawingCache();
      Bitmap bmap = imagen.getDrawingCache();

      //guardar imagen
      Save savefile = new Save();
      savefile.SaveImage(context, bmap);
      }
      });

      Sale error porque no reconoce el context, que debo de poner en el context ?

  6. Hola debo importar alguna algo en especial? por que tengo varias lineas en rojo por ejemplo context, bitmap(como te daras cuenta soy novato) Gracias saludos

Dejar respuesta

Please enter your comment!
Please enter your name here