Contexto
Busqué posibles respuestas a esta pregunta y encontré soluciones que utilizan el filter: invert(...) ( ejemplo ) para invertir los colores de una imagen al pasar el mouse. Sin embargo, la funcionalidad que esto proporciona es particularmente limitada. Para ver un ejemplo de lo que estoy tratando de lograr, hay un ejemplo en este sitio o esta demostración de grabación de pantalla , que se puede ver al pasar el mouse sobre una de las miniaturas de la página. Al pasar el mouse, la imagen dada cambia a una representación invertida y luego en blanco y negro, aunque en una mirada más cercana parece que solo ciertos colores se invierten durante esta transición; observe cómo el azul en el estado no activo no se invierte a rosa/naranja cuando se cierne sobre. Parece que solo los colores en un rango determinado experimentan esta inversión, de modo que la inversión proporciona solo un efecto azul/verde azulado durante la transición.
Aclaración de problemas
Por lo que puedo decir, hay un par de piezas complejas clave en este sentido:
Pregunta
Aprecio que esta sea una pieza de funcionalidad particularmente específica, pero estoy buscando obtener una comprensión más profunda de este estilo más complejo de manipulación de imágenes. Parece que CSS es claramente demasiado limitado para poder proporcionar esta funcionalidad, lo que me da una indicación de que este es un efecto que depende en gran medida de javascript, y potencialmente requiere el uso de un elemento de lienzo como lo usa el sitio web de ejemplo, pero no estoy seguro de cómo hacerlo. Encuentre más información sobre cómo funciona esto o los principios utilizados. Entonces las preguntas son las siguientes:
Gracias por adelantado
Hay una biblioteca llamada Caman.js que podría usarse para crear efectos tipo Instagram. Ya no se mantiene activamente: el repositorio de github está aquí: CamanJS . Utiliza Canvas debajo del capó. Lo usé una vez hace unos 7 años y las transformaciones solían llevar mucho tiempo.
Puede dibujar la imagen en un lienzo y luego recorrer cada punto eliminando el rojo, por ejemplo.
Me pregunto si eso vale la pena, puede ser bastante intensivo en el procesador.
Para una eliminación rápida del tono rojo, puede aplicar un filtro y animar el filtro al pasar el mouse sobre él.
Aquí hay un ejemplo muy simple. Jugar con tiempos, rotaciones, sepia y otros puede producir resultados más sutiles.
.thruBlue { width: 10vw; height: auto; display: inline-block; } .thruBlue:hover { animation: 1 recolor 0.7s linear; animation-fill-mode: forwards; } @keyframes recolor { 0%, 50% { filter: grayscale(0) hue-rotate(215deg); } 100% { filter: hue-rotate(215deg) grayscale(100%); } } <img src="https://i.stack.imgur.com/NbloO.png" class="thruBlue">