C'è un modo per verificare se un punto (x, y) selezionato di un'immagine PNG è trasparente?Come ottenere il colore di coordinate x, y di un pixel da un'immagine?
risposta
Sulla base della risposta di Jeff, il primo passo sarebbe creare una rappresentazione su tela del PNG. Quanto segue crea una tela fuori schermo che ha la stessa larghezza e altezza dell'immagine e ha l'immagine disegnata su di essa.
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);
Dopo di che, quando un utente fa clic, usano event.offsetX
e event.offsetY
per ottenere la posizione. Questo può quindi essere utilizzato per acquisire il pixel:
var pixelData = canvas.getContext('2d').getImageData(event.offsetX, event.offsetY, 1, 1).data;
Poiché sei solo afferrando un pixel, pixelData è un array di quattro voce contenente R del pixel, G, B, e valori A. Per alfa, qualsiasi valore inferiore a 255 rappresenta un livello di trasparenza con 0 completamente trasparente.
Ecco un esempio jsFiddle: http://jsfiddle.net/thirtydot/9SEMf/869/ Ho usato jQuery per comodità in tutto questo, ma non è affatto necessario.
Nota:getImageData
cadute sotto criterio dell'origine del browser per evitare perdite di dati, il che significa questa tecnica avrà esito negativo se si sporca la tela con l'immagine di un altro dominio o (credo, ma alcuni browser potrebbero aver risolto questo) SVG da qualsiasi dominio. Questo protegge contro i casi in cui un sito serve una risorsa immagine personalizzata per un utente che ha effettuato l'accesso e un utente malintenzionato vuole leggere l'immagine per ottenere informazioni. È possibile risolvere il problema servendo l'immagine dallo stesso server o implementando Cross-origin resource sharing.
boom - lavoro fantastico. Sapevo che avrei dovuto fare un violino come questo ma era troppo grasso e pigro. l'hai ucciso qui –
Perché questo sia corretto, devi impostare lo spazio delle coordinate della tela, cioè impostare la larghezza e l'altezza in modo che corrisponda alle dimensioni dell'immagine. Larghezza e altezza CSS servono solo per allungare la tela finale per il layout, il che non aiuta quando si tratta di un elemento non visualizzato. Prova qualcosa come $ ('') ;. O questo in qualche modo non si applica con tele fuori schermo? – fabspro
@fabspro: questo è un punto eccellente. Poiché il disegno e la lettura dei dati dell'immagine sono fatti tramite il contesto, i valori di larghezza e altezza non hanno senso. Non hanno alcun effetto negativo perché la tela non contamina il contesto e la ragione per cui non ho visto questo effetto sul mio demo è semplicemente perché l'immagine è più piccola della larghezza/altezza iniziale del contesto. Aggiornerò di conseguenza, sebbene sia più sicuro accedere a '.width 'e' .height' sulla tela stessa piuttosto che attraverso la concatenazione. –
La tela sarebbe un ottimo modo per fare ciò, come @pst ha detto sopra. Check out questa risposta per un buon esempio:
Alcuni codice che servirà specificamente così:
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]
}
questo andrà riga per riga, così avresti bisogno di convertire quel in una x, y e converti il ciclo for in un controllo diretto o esegui un condizionale all'interno.
Leggendo nuovamente la domanda, sembra che si sia in grado di ottenere il punto su cui la persona fa clic. Questo può essere fatto abbastanza facilmente con l'evento click di jquery. Basta eseguire il codice sopra all'interno di un gestore di clic come tale:
$('el').click(function(e){
console.log(e.clientX, e.clientY)
}
Questi dovrebbero prendere i valori xey.
Le due risposte precedenti mostrano come utilizzare Canvas e ImageData. Vorrei proporre una risposta con un esempio eseguibile e utilizzare un framework di elaborazione delle immagini, quindi non è necessario gestire manualmente i dati dei pixel.
MarvinJ fornisce il metodo image.getAlphaComponent (x, y) che restituisce semplicemente il valore di trasparenza per il pixel in coordinate x, y. Se questo valore è 0, il pixel è totalmente trasparente, i valori compresi tra 1 e 254 sono livelli di trasparenza, infine 255 è opaco.
Per dimostrare ho usato l'immagine qui sotto (300x300) con sfondo trasparente e due pixel a coordinate (0,0) e(150.150). Uscita
Console:
(0,0): TRASPARENTE
(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. Come posso ottenere il colore di un pixel su X, Y usando C#?
- 2. per ottenere codici postali statunitensi da gis x, coordinate y
- 3. Coordinate X/Y Regex
- 4. Google Maps: ottenere clic o marcatore (x, y) coordinate di pixel all'interno marcatore click ascoltatore
- 5. Ottenere il colore del pixel in C++
- 6. Come ottenere coordinate del mondo reale (x, y, z) da un oggetto distinto usando un Kinect
- 7. calcolate nuove coordinate da vecchi e coordinate x ed y
- 8. strumento per ottenere le coordinate di un pixel dell'immagine
- 9. Come ottenere il colore di un pixel in un UIView?
- 10. HTML5: dragover(), drop(): come ottenere le coordinate x, y correnti?
- 11. Come posso ottenere le coordinate x/y di un elemento SVG (percorso, ecc.) Che non ha gli attributi X/Y?
- 12. Ottieni il colore dei pixel da un'immagine
- 13. iOS: rileva il colore di un pixel?
- 14. Get X e pixel Y coordinate quando l'iterazione di HTML5 Canvas getImageData
- 15. GetDIBits e loop through pixel utilizzando X, Y
- 16. jQuery x y coordinate documento dell'oggetto DOM
- 17. WPF Popup Controllo - Trova coordinate x, y
- 18. Come trovare elemento in Visualizza per coordinate x, y Android
- 19. Come convertire il pixel intero get.rgb (x, y) in Colore (r, g, b, a) in Java?
- 20. Converti lat/long a coordinate X/Y
- 21. Come ottenere il colore dal pixel? OpenGL
- 22. widget di schermata iniziale Android coordinate x-y
- 23. GLSL: come ottenere la posizione del mondo pixel x, y, z?
- 24. bufferedImage.getRGB (x, y) non produce alfa
- 25. Posiziona componenti su coordinate arbitrarie (x, y)
- 26. Come ricalcolare le coordinate x, y in base alla schermata
- 27. Dato un insieme di punti definiti nelle coordinate (X, Y, Z), interpolare il valore Z su arbitrario (X, Y)
- 28. Striatura di ruby: x == y && [x, y] .uniq == [x, y]
- 29. Come accedere al colore dei pixel all'interno di una bitmap?
- 30. iPhone Obiettivo C: come ottenere il colore di un pixel del punto toccato su UIImageView?
Può l'immagine in qualche modo essere caricata su un elemento Canvas? –
Se non c'è altro modo, allora –
Ecco come deve essere fatto. –