Usando GIMP, ¿puedes "borrar" un color?

Actualmente estoy trabajando en una aplicación de iOS y estoy intentando aplicar ingeniería inversa a su ventana de diálogo de alerta estándar. Me las arreglé para averiguar cuál es el valor alfa en el fondo que usa a través de un muestreo de color contra una vista en negro sólido y una vista en blanco sólido.

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

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

Respuestas (1)

Si es posible. Permítanme describir 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 en 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 está 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 combínela. Invertir el resultado. Esto le da 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 arreglar eso, primero desature la capa (usando el modo que le brinde el mejor contraste) y luego use Colores → Automático → Normalizar para hacer que el fondo sea negro. En su lugar, también podría usar el Mezclador de canales , pero es un poco más complicado de usar.

    ( La normalización anterior funciona si el canal alfa que está recreando tiene al menos algunas partes con un 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 uno, 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. Cree una nueva capa encima llena con su color de fondo.
    • Clona la capa de diferencia y vuelve a invertirla para que tenga un fondo blanco. Coloque esta capa encima de la nueva de color sólido que acaba de crear, establezca su modo de capa en "multiplicar" y combínela.
    • Finalmente, cambie el modo de la capa resultante a "restar" y combínelo con la capa con la imagen original. Esto debería sustraer el fondo original, dejándote con la imagen sobre un fondo negro.
  3. Si estuviéramos usando un formato de imagen con alfa premultiplicado, 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), establezca su modo de capa en "dividir" y combínela con la capa de fondo negro que clonó antes del paso 2. El resultado debería verse así (compárelo con la versión original con 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 sobre fondos en blanco y negro puros . Si los fondos están un poco apagados, es posible que aún se puedan usar métodos similares, pero es posible que deba realizar ajustes de color adicionales y es posible que los resultados no sean 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 un modo de fusión para la herramienta Relleno de cubeta, 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 sólido. Sin embargo, a menos que se use con cuidado, tiende a producir una salida que es bastante más transparente de lo que probablemente le gustaría que fuera .

pp. Si compara las imágenes originales y reconstruidas con mucho cuidado, verá que no son exactamente idénticas: algunos valores de color tienen una desviación de 1/256 más o menos. Eso 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 salida = (255 × entrada ) / capa , en realidad calcula salida = (256 × entrada ) / ( capa+ 1). Este desajuste, que aparentemente se hace para evitar dividir por cero, significa que algunos de los colores pueden redondearse a un valor ligeramente diferente al 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 por el ojo humano.