Mi problema es muy general y hay complementos que dependen de la versión para el problema que no funciona con mi versión. También encontré soluciones alternativas que no son las soluciones correctas.
Me gustaría convertir el blanco de mi imagen en transparencia, es decir, descomponer el gris en negro y transparente. Sería correcto si pudiera usar el valor de saturación del píxel de la (des)composición HSB, aumentar la saturación de cada píxel al 100% de su valor original s(x,y) y agregar un 100% - s(x, y) transparencia al píxel.
Como sugieren la solución mencionada y muchas otras, usar la imagen en sí como un canal alfa no es una solución. Por ejemplo, si el píxel es 20 % blanco y 80 % gris, y aplica un 20 % de transparencia, el píxel se verá como 80 % - 0,8*0,2 = 56 % negro en lugar de 80 %.
Otra pregunta de stackexchange sobre convertir el blanco en transparente es similar a mi problema, pero según tengo entendido, no cubre mi problema. En caso de que me equivoque, agradecería que alguien me ilumine cómo aplicar eso a mi escenario.
Sé que preguntó cómo hacer esto en Photoshop, pero este puede ser uno de los pocos casos (ahora que Photoshop también tiene relleno con reconocimiento de contenido) donde GIMP hace el trabajo mejor. Así que mi solución sugerida sería:
Descarga e instala GIMP. (Desplácese hacia abajo para el instalador de Windows).
Abre tu imagen en GIMP.
Utilice la herramienta Color a alfa para convertir el blanco en transparente ( enmascarando y ajustando según sea necesario, si desea conservar algo de blanco no transparente en el resultado).
Guarde la imagen resultante y vuelva a abrirla en Photoshop.
Nota: GIMP puede importar y exportar archivos .psd de Photoshop, pero es posible que se pierda parte de la información durante la conversión de ida y vuelta. Puede ser más seguro editar solo sus archivos PSD en Photoshop y usar el formato PNG para transferir imágenes entre Photoshop y GIMP.
No puede cambiar el gris a negro y hacer que el blanco sea transparente con un solo método. La única forma de hacerlo sin enmascarar es cambiar los niveles de toda la imagen si está de acuerdo. Entonces, si tiene algo coloreado, por ejemplo, en la imagen, tendría que enmascararlo.
(Duplique primero la capa de su imagen y ocúltela para hacer una copia de seguridad) En su capa, cree una máscara de capa. seleccione toda su imagen y ctrl+shift+c cópiela. Alt + clic en el icono de máscara de capa en el panel de capas para activarlo. ctrl+shift+v pégalo allí. Deseleccione y ctrl+i para invertir los colores. Todas las áreas blancas deberían ser negras ahora, lo que significa que están 100% enmascaradas.
Ahora cree una capa de ajuste de umbral. esto debería hacer que la capa de abajo (su capa de imagen) se vuelva en blanco y negro puro. Ajuste el equilibrio según sea necesario y agregue una máscara de capa al umbral si tiene áreas coloreadas que no desea convertir de gris a negro. Seleccione todo ctrl+shift+c copie y pegue en su capa de imagen original.
El resultado debe ser una versión en blanco y negro de su imagen con sus valores originales en blanco y negro (sin umbral) que controlan la capa de transparencia. Su 20 % de grises ahora aparecerá como un 20 % de negros.
Solo por curiosidad, se me ocurrió un script de prueba de concepto para que PS hiciera lo que sugeriste, pero desafortunadamente es extremadamente lento . Si desea probarlo, cree un nuevo documento de alrededor de 25 px cuadrados, nombre la capa base "base" y luego agregue dos capas vacías llamadas "Alfa" y "HSB". La capa alfa se llena con píxeles que tienen un valor gris (en RGB) basado en el valor S, y la capa HSB se llena con píxeles que tienen el valor S modificado a 100. La capa Alfa se puede usar como una máscara de capa para la capa HSB (seleccione todo, agregue máscara de capa a la capa HSB, cambie a canales y pegue la capa alfa copiada en el canal de máscara HSB).
Si oculta todas las paletas, parece que se ejecuta un poco más rápido, pero una imagen real es "ir a tomar un café y tal vez hacer algunas compras" lento. "Toma una siesta" lento.
var currDoc = app.activeDocument;
var sampler = currDoc.colorSamplers.add([0,0]);
for (var x = 0; x < currDoc.width; ++x) {
for (var y = 0; y < currDoc.height; ++y) {
currDoc.activeLayer = currDoc.artLayers.getByName("base");
sampler.move([x,y]);
var result = selectPixel(x,y, currDoc);
result = setPixelColorHSB(sampler.color, currDoc);
result = setPixelColorALPHA(sampler.color, currDoc);
}
}
sampler = null;
currDoc.selection.deselect;
function setPixelColorHSB(pixelColor, currDoc) {
currDoc.activeLayer = currDoc.artLayers.getByName("HSB");
currDoc.activeLayer.visible = true;
var color = new SolidColor();
color.hsb.hue = pixelColor.hsb.hue;
color.hsb.saturation = 100;
color.hsb.brightness=pixelColor.hsb.brightness;
currDoc.selection.fill(color);
currDoc.activeLayer.visible = false;
return true;
}
function setPixelColorALPHA(pixelColor, currDoc) {
currDoc.activeLayer = currDoc.artLayers.getByName("ALPHA");
currDoc.activeLayer.visible = true;
var color = new SolidColor();
color.rgb.red = Math.floor((pixelColor.hsb.saturation/100) * 255);
color.rgb.green = color.rgb.red;
color.rgb.blue = color.rgb.red;
currDoc.selection.fill(color);
currDoc.activeLayer.visible = false;
return true;
}
function selectPixel (pixX, pixY, currDoc) {
currDoc.selection.deselect;
var selRegion = null;
selRegion = [
[pixX, pixY],
[pixX + 1, pixY],
[pixX + 1, pixY + 1],
[pixX, pixY + 1],
[pixX, pixY]
];
currDoc.selection.select(selRegion);
return true;
}
Encontré una forma que se ajusta a mis necesidades. Te lo comparto para que lo critiques. Estoy buscando más mejoras, ¡así que siéntase libre de agregar sus notas o respuestas!
Desafortunadamente, esta solución no es general debido al uso del canal cmyk. Pero con este procedimiento puedes obtener esto
de este: (descargue las imágenes y vea la transparencia si no ve diferencias)
John
danieltuzes
Stan
Stan