Usando GIMP, ¿puedes "borrar" un color?

9

Actualmente estoy trabajando en una aplicación de iOS y estoy intentando realizar ingeniería inversa en su ventana de diálogo de alerta estándar. Me las he arreglado para descubrir cuál es el valor alfa en el fondo que utiliza mediante un muestreo de color en una vista en negro sólido y una vista en blanco sólido.

Dada esta información, utilizando GIMP, ¿es posible simplemente "borrar" el color de fondo, de modo que solo me quede el fondo de alerta original sin mezclar?

Solo tengo la vista de alerta en forma de imagen como una captura de pantalla de una aplicación en ejecución.

Dan F
fuente

Respuestas:

8

Si es posible. Permítanme resumir cómo se hace, usando esta imagen de Wikimedia Commons (por ed_g2s , con licencia CC-By-SA 3.0 ) como ejemplo:

Imagen de demostración de transparencia PNG de ed_g2s, con licencia CC-By-SA 3.0

  1. Abra las versiones de fondo blanco y negro como capas de la misma imagen (usando Abrir como capas ... o simplemente abra ambas y copie y pegue una en la otra). Mueva la capa blanca sobre la capa negra si aún no es así. Las dos capas deberían verse así:

    Imagen de demostración con fondo negro Imagen de demostración con fondo blanco.

  2. Tome la diferencia de las capas: clone la capa negra (la necesitará más adelante), cambie el modo de capa de la capa blanca a "diferencia" y fusione hacia abajo. Invierte el resultado. Esto le proporciona el canal alfa de la imagen original.

    Canal alfa reconstruido

    Editar: si sus fondos no son en blanco y negro, la capa de diferencia invertida no tendrá un fondo negro. Para solucionarlo, primero desaturar la capa (usando el modo que le ofrezca el mejor contraste) y luego usar Colores → Auto → Normalizar para que el fondo sea negro. También puedes usar el Mezclador de canales , pero es un poco más complicado de usar.

    ( Normalizar arriba funciona si el canal alfa que está recreando tiene al menos algunas partes con 100% de opacidad; si la imagen que está recreando es translúcida en todas partes, puede usar Colores → Niveles ... para establecer solo el punto negro en su lugar. )

    Si aún no tiene una, también debe crear una versión de su imagen con un fondo negro para el siguiente paso. Para hacer eso, use los siguientes pasos adicionales:

    • Elija la versión original que tenga el fondo más oscuro. Crea una nueva capa encima llena de su color de fondo.
    • Clone la capa de diferencia y vuelva a invertirla para que tenga un fondo blanco. Coloque esta capa encima de la nueva de color sólido que acaba de crear, configure su modo de capa para "multiplicar" y fusionarla.
    • Finalmente, cambie el modo de la capa resultante para "restar" y combínelo en la capa con la imagen original. Esto debería restar el fondo original, dejándolo con la imagen en un fondo negro.
  3. Si estuviéramos usando un formato de imagen con alfa pre-multiplicado, estaríamos más o menos listos ahora. Pero como no lo estamos, aún necesitamos desmultiplicar los canales RGB. Para hacerlo, clone la capa alfa que creamos en el paso anterior (o simplemente cópiela en el portapapeles), configure su modo de capa para "dividir" y fusione hacia abajo con la capa de fondo negro que clonó antes del paso 2. El resultado debería verse así (compárese con la versión original de fondo negro para ver la diferencia):

    Canales RGB desmultiplicados

  4. Ahora, agregue una máscara de capa a la capa resultante, seleccione la máscara y pegue la capa alfa en ella. El resultado ahora debería parecerse más o menos a la imagen transparente original. Finalmente, para convertir la máscara en un canal alfa adecuado, puede aplicarla (pero la exportación PNG de GIMP lo hará por usted, incluso si no lo hace). Y ahí lo tienes: un PNG transparente reconstruido listo para usar:

    Imagen reconstruida con transparencia.

Por supuesto, esta técnica realmente requiere que tenga versiones de la imagen en puras fondos blancos y negros puros. Si los fondos están un poco apagados, aún pueden utilizarse métodos similares, pero es posible que deba realizar ajustes de color adicionales y los resultados pueden no ser tan perfectos. ( Editar: consulte las adiciones al paso 2 anterior. Las instrucciones modificadas deberían funcionar con fondos de cualquier color, siempre que sean colores sólidos).


PD. GIMP también tiene una función de "Borrado de color" (como modo de fusión para la herramienta Relleno de cubo, o como Color a alfa ... para toda la imagen), que es útil para reconstruir la transparencia cuando solo tiene una versión de la imagen sobre un fondo de color liso Sin embargo, a menos que se use con cuidado, tiene una tendencia a producir resultados que son bastante más transparentes de lo que probablemente desearía que fuera .

Pps Si compara las imágenes originales y reconstruidas con mucho cuidado, verá que no son exactamente idénticas: algunos valores de color están desactivados en 1/256 más o menos. Esto se debe a cómo funciona el modo de capa "dividir" de GIMP : en lugar de calcular el verdadero inverso de la multiplicación alfa, que sería output = (255 × input ) / layer , en realidad calcula output = (256 × input ) / ( layer+ 1). Este desajuste, que aparentemente se hace para evitar dividir entre cero, significa que algunos de los colores pueden redondearse a un valor ligeramente diferente de lo que deberían. Por desgracia, no conozco otra forma de evitar esto, aparte de parchear GIMP, escribir un complemento para hacer la división de la manera que queremos, o usar algún otro programa. Afortunadamente, sin embargo, la diferencia de color rara vez es realmente perceptible para el ojo humano.

Ilmari Karonen
fuente