5 votos

¿Cómo se aplican las ediciones de la aplicación de la galería a las imágenes?

Hoy me he dado cuenta de que si aplicas filtros o modificas una imagen con la aplicación de la galería, aplica los cambios a la imagen, en lugar de crear una nueva imagen con los cambios. Mi primer pensamiento fue que no era una buena idea. A veces se quiere mantener la imagen original, sin tocar, así como la imagen modificada, tal vez para fines de comparación, o para probar diferentes filtros o ajustes. En mi caso, estuve jugando con las curvas y luego guardé la imagen. Quería comparar la nueva imagen con la original, pero la original había desaparecido. Decidí volver a la configuración de las curvas, y vi que las curvas seguían siendo como las había configurado, lo que significa que puedo simplemente restaurar la curva para cada canal y eso me devolverá la imagen original.

Decidí hacer una prueba con otra imagen. Abrí una nueva imagen, apliqué un filtro de los filtros preestablecidos y guardé la imagen. Luego volví a la imagen, y la edité de nuevo, pero esta vez eliminé el filtro, y la imagen volvió a ser normal.

Mi primer pensamiento fue que la imagen de la galería aplicaba ediciones no destructivas. Algo parecido a lo que hacen algunos programas de edición. El que me viene a la mente es Shotwell, aunque éste es más un visor que un editor, pero tiene algunas funciones limitadas para jugar con la saturación, los niveles y otros ajustes. No parecía probable que la aplicación de la galería en adroid estuviera haciendo eso porque otras aplicaciones de visualización de imágenes mostraban la imagen con el filtro aplicado.

Decidí conectar el dispositivo al ordenador mediante un cable USB. Navegué a la carpeta de la cámara, y abrí la imagen en el ordenador, y mostró la imagen modificada. Esto significa que la imagen está siendo modificada. Mientras el dispositivo seguía conectado al ordenador, decidí quitar el filtro y abrir la imagen de nuevo en el ordenador. La imagen volvió a ser la original.

¿Cómo es que Android puede modificar el archivo de imagen directamente, y luego restaurarlo al original. Está guardando el archivo original en otro lugar?

Cómo se reproduce:

  1. Abra la aplicación Galería (la que viene por defecto)
  2. Elija una imagen para editarla y toque el pequeño lápiz en la esquina inferior izquierda de la pantalla.
  3. Edita tu imagen, toca el botón de guardar, o simplemente pulsa el botón. Te preguntará si quieres guardar la imagen. Guárdala.
  4. Toca de nuevo el lápiz y quita el filtro.
  5. Tu imagen vuelve a ser la original.

Dispositivo: Nexus 7

SO: Android 4.4.2

1 votos

Que yo sepa, la Galería guarda la imagen modificada en otro archivo de la misma carpeta. Pero nunca he estado en KitKat...

0 votos

Eso es lo que estaba pensando, pero descuido demasiado mi dispositivo como para haber leído algo al respecto antes.

5voto

Andy Brudtkuhl Puntos 1714

Puede encontrar la fuente de esta aplicación en el paquete Gallery2 en AOSP . Todo el código del editor de fotos está en src/com/android/gallery3d/filtershow . El ahorro es gestionado por tools/ImageSave.java que tiene este comentario que explica el comportamiento (que he formateado):-

Para soportar el nuevo comportamiento de editar-guardar de manera que el usuario no vea la imagen editada junto con la imagen original, estamos añadiendo un nuevo directorio auxiliar para la imagen editada. Básicamente, la imagen original se ocultará en ese directorio después de la edición y el usuario sólo verá la imagen editada.

Tenga en cuenta que la eliminación de la imagen editada también provocará la eliminación de la imagen original en el directorio auxiliar.

Hay varias situaciones que debemos considerar:

  1. El usuario edita la imagen local local01.jpg . A local02.jpg se creará en el mismo directorio, y la imagen original se trasladará al directorio auxiliar como ./.aux/local02.jpg . Si el usuario edita el local02.jpg , local03.jpg se creará en el directorio local y ./.aux/local02.jpg pasará a llamarse ./.aux/local03.jpg

  2. El usuario edita la imagen remota remote01.jpg desde picassa u otro servidor. remoteSavedLocal01.jpg se guardará en el directorio local adecuado. En remoteSavedLocal01.jpg habrá una referencia que apunte al remote01.jpg . No habrá copia local de remote01.jpg . Si el usuario edita remoteSavedLocal01.jpg y, a continuación, un nuevo remoteSavedLocal02.jpg se generará y seguirá apuntando al remote01.jpg

  3. El usuario borra cualquier imagen local local.jpg . Dado que los nombres de los archivos se mantienen consistentes en el directorio auxiliar, cada vez que un local.jpg se borran, los archivos del directorio auxiliar cuyos nombres empiezan por " local. " será eliminado. Este patrón facilitará el borrado de múltiples imágenes en el directorio auxiliar.

En resumen: Guarda las imágenes editadas en un .aux dentro del directorio del que procede la imagen.

También almacena la cadena de filtros que utilizó para crear la imagen en Metadatos XMP dentro de la nueva imagen (la filtrada), en el espacio de nombres http://ns.google.com/photos/1.0/filter/ . Esta información consiste en:

  • SourceFileUri : el URI donde se ha guardado el archivo sin modificar
  • filterstack una representación serializada de la pila de filtros que utilizó (en el mismo formato que guarda los preajustes en su base de datos privada)

0 votos

¡Gran respuesta! Con enlace de código y todo. Me encanta. Muchas gracias, Dan.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X