¿Hay alguna manera de verificar si un punto seleccionado (x, y) de una imagen PNG es transparente?¿Cómo obtener el color de coordenada x, y de un píxel de una imagen?
Respuesta
Basándose en la respuesta de Jeff, su primer paso sería crear una representación en lienzo de su PNG. A continuación, crea un lienzo fuera de pantalla que tiene el mismo ancho y alto que su imagen y tiene la imagen dibujada en él.
var img = document.getElementById('my-image');
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
Después de eso, cuando un usuario hace clic, y utilizan event.offsetX
event.offsetY
para obtener la posición. Esto puede ser utilizado para adquirir el píxel:
var pixelData = canvas.getContext('2d').getImageData(event.offsetX, event.offsetY, 1, 1).data;
Debido a que sólo están agarrando un píxel, pixelData es una matriz de cuatro entrada que contenga R del píxel, G, B, y los valores de a. Para alfa, cualquier cantidad inferior a 255 representa algún nivel de transparencia, siendo 0 completamente transparente.
Aquí hay un ejemplo de jsFiddle: http://jsfiddle.net/thirtydot/9SEMf/869/ Utilicé jQuery por comodidad en todo esto, pero de ninguna manera es obligatorio.
Nota:getImageData
cae bajo política del mismo origen del navegador para prevenir fugas de datos, lo que significa que esta técnica se producirá un error si se ensucian la lona con una imagen de otro dominio o (creo, pero algunos navegadores pueden haber resuelto este) SVG desde cualquier dominio. Esto protege contra los casos en que un sitio sirve un elemento de imagen personalizado para un usuario conectado y un atacante desea leer la imagen para obtener información. Puede resolver el problema sirviendo la imagen desde el mismo servidor o implementando Cross-origin resource sharing.
boom - trabajo increíble. Sabía que debería haber hecho un violín así, pero estaba demasiado gordo y flojo. lo mató aquí –
Para que esto sea correcto, debe establecer el espacio de coordenadas del lienzo, es decir, establecer el ancho y el alto para que coincidan con las dimensiones de la imagen. El ancho y alto de CSS solo sirven para estirar el lienzo final para el diseño, lo que no ayuda cuando se trata de un elemento no visible. Pruebe algo como $ ('') ;. ¿O esto de alguna manera no se aplica con lienzos fuera de la pantalla? – fabspro
@fabspro: Es un excelente punto. Como dibujar y leer los datos de imagen se realizan a través del contexto, los valores de ancho y alto no tienen sentido. No tienen ningún efecto negativo porque el lienzo no se contrae el contexto y la razón por la que no vi este efecto en mi demostración es simplemente porque la imagen es más pequeña que el ancho/alto inicial del contexto. Actualizaré en consecuencia, aunque es más seguro acceder a '.width' y' .height' en el propio lienzo que a través de la concatenación. –
El lienzo sería una excelente manera de hacerlo, como @pst dijo anteriormente. Echa un vistazo a esta respuesta para un buen ejemplo:
un código que serviría que específicamente así:
var imgd = context.getImageData(x, y, width, height);
var pix = imgd.data;
for (var i = 0, n = pix.length; i < n; i += 4) {
console.log pix[i+3]
}
Esto irá fila por fila, por lo que había necesidad de convertir ese en una x, y y convertir el bucle for a una verificación directa o ejecutar un interior condicional.
Al volver a leer su pregunta, parece que desea obtener el punto en el que la persona hace clic. Esto se puede hacer bastante fácilmente con el evento de clic de jquery. Simplemente ejecute el código anterior dentro de un manejador de clics como tal:
$('el').click(function(e){
console.log(e.clientX, e.clientY)
}
Deben capturar sus valores x e y.
Las dos respuestas anteriores demuestran cómo usar Canvas y ImageData. Me gustaría proponer una respuesta con un ejemplo ejecutable y el uso de un marco de procesamiento de imágenes, por lo que no es necesario manejar los datos de píxeles manualmente.
MarvinJ proporciona el método image.getAlphaComponent (x, y) que simplemente devuelve el valor de transparencia para el píxel en coordenadas x, y. Si este valor es 0, el píxel es totalmente transparente, los valores entre 1 y 254 son niveles de transparencia, finalmente 255 es opaco.
Para demostrar que he usado la imagen (300x300) con fondo transparente y dos píxeles a coordenadas (0,0) y(150,150). salida
Console:
(0,0): TRANSPARENTE
(150,150): NOT_TRANSPARENT
var canvas = document.getElementById("canvas");
image = new MarvinImage();
image.load("https://i.imgur.com/eLZVbQG.png", imageLoaded);
function imageLoaded(){
console.log("(0,0): "+(image.getAlphaComponent(0,0) > 0 ? "NOT_TRANSPARENT" : "TRANSPARENT"));
console.log("(150,150): "+(image.getAlphaComponent(150,150) > 0 ? "NOT_TRANSPARENT" : "TRANSPARENT"));
}
<script src="https://www.marvinj.org/releases/marvinj-0.7.js"></script>
<canvas id="canvas" width="500" height="344"></canvas>
- 1. Encontrar el color del píxel en una coordenada específica de un sampler2D usando GLSL
- 2. ¿Cómo obtener el color de un píxel en una UIView?
- 3. ¿Cómo obtener el color del píxel? OpenGL
- 4. ¿Cómo obtengo el color de un píxel en X, Y usando C#?
- 5. Obtener color de píxel de UIImage
- 6. Calcular nueva coordenada x e y grado metros de distancia de una coordenada
- 7. herramienta para obtener las coordenadas de un píxel de imagen
- 8. ¿Cómo obtener latitud y longitud para un píxel de una imagen eumetsat usando python?
- 9. ¿Cómo obtener un componente de una coordenada tikz/PGF?
- 10. Obtener color de imagen
- 11. rmagick valor de color de píxel
- 12. ¿Cómo obtener un color de mayoría en una imagen?
- 13. ¿Cómo encontrar el valor de transparencia del canal alfa de un píxel en una imagen png?
- 14. Obtén color de píxel más rápido?
- 15. ¿Cómo puedo establecer el color de un píxel en un lienzo usando WebGL?
- 16. DirectX establece el color de un solo píxel
- 17. Leer una imagen píxel por píxel en Ruby
- 18. Obtener el color del píxel en su ubicación con pygame
- 19. obteniendo color de píxel con Magick ++
- 20. Obtener el RGB de píxel con PIL
- 21. Cómo convertir el píxel entero get.rgb (x, y) a Color (r, g, b, a) en Java?
- 22. iOS Performance Tuning: forma más rápida de obtener el color de píxel para imágenes grandes
- 23. Hacer que cada píxel de una imagen tenga un color específico transparente
- 24. ¿Cómo obtener la coordenada xey de la imagen de mapa de bits en el control de imagen?
- 25. ¿Cómo se procesa la imagen píxel por píxel con WinAPI de forma RÁPIDA?
- 26. ¿Cómo manipular una imagen a nivel de píxel en C?
- 27. Cómo obtener una imagen en color en el iPhone SDK
- 28. ¿Cómo acceder al color de píxel dentro de un mapa de bits?
- 29. Cómo mostrar una imagen y hacer clic con el mouse en la coordenada
- 30. ¿Cómo puedo probar un clic en una determinada coordenada x, y?
Puede la imagen de alguna manera ser cargado en un elemento de lona? –
Si no hay otra manera, entonces –
Así es como debe hacerse. –