2013-07-22 13 views
17

Ho un'immagine su un browser.Ottieni il colore dei pixel da un'immagine

Desidero ottenere il pixel in alto a sinistra del colore dell'immagine (alle coordinate: 0,0), indipendentemente dal fatto che l'immagine sia ruotata o meno.

Come posso farlo utilizzando il codice javascript o php?

+2

possibile vittima, come ottenere un pixel (x, y) da un'immagine in javascript: http://stackoverflow.com/questions/8751020/how-to-get-a-pixels-color -of-an-image –

+0

Per una soluzione PHP vedi [ottieni il primo pixel dall'immagine usando php] (http://stackoverflow.com/questions/14178182/get-the-first-pixel-from-the-image- utilizzando-php). Anche se non ti aiuterà se vuoi un'immagine di una pagina renderizzata e non un'immagine incorporata. Per ottenere un colore pixel di una pagina renderizzata, vedere la risposta accettata su [JavaScript eyedropper (indicare il colore di Pixel sotto il cursore del mouse)] (http://stackoverflow.com/questions/1936021/javascript-eyedropper-tell-color-of -pixel-under-topo-cursore). – user

+0

Possibile duplicato di [Come ottenere un pixel x, y coordinare il colore da un'immagine?] (Https://stackoverflow.com/questions/8751020/how-to-get-a-pixels-xy-coordinate-color-from -an-image) –

risposta

34
  • Creare un document.createElement tela
  • Prendi il contesto 2d canvas.getContext('2d')
  • Disegna l'immagine sulla tela context.drawImage(image, x, y)
    • Assicurarsi che l'immagine è dallo stesso dominio o non avrà accesso ai suoi pixel
  • ottenere i dati di pixel per l'immagine context.getImageData(x1, y1, x2, y2)
    • Volete solo in alto a sinistra in modo context.getImageData(0, 0, 1, 1)
  • Il risultato di getImageData avrà una matrice di pixel è data campo (context.getImageData(0,0,1,1).data)
    • L'array avrà r, g, b e a valori.
+0

Grazie. Penso che dovresti avere una ricompensa per una risposta molto veloce. Che cosa è il caso, se il browser non supporta html5. C'è qualche soluzione nel codice php? – Eitan

+2

@Eitan: se non è disponibile il supporto per la tela, è necessario passare l'immagine (con una richiesta AJAX) al server per utilizzare il codice lato server per ottenere i dati dei pixel o utilizzare un abominio Flash/Silverlight per gestirli. –

+2

Un altro punto a cui prestare attenzione: i valori dei pixel resi con drawImage potrebbero essere diversi dai valori dell'immagine a causa della correzione dello spazio colore.Meno male che ciò accade solo se l'immagine contiene informazioni sullo spazio colore. – ironic

12

Per un'immagine su un browser non è possibile utilizzare PHP a meno che non sia possibile trasferire prima l'immagine su un server.

n browser, se è possibile disegnare l'immagine in un canvas è possibile utilizzare il metodo getImageData():

var myImg = new Image(); 
myImg.src = 'image.jpg'; 
var context = document.getElementById('canvas').getContext('2d'); 
context.drawImage(myImg, 0, 0); 
data = context.getImageData(x, y, 1, 1).data; 

Avresti per consentire la rotazione - presumibilmente si sa che cosa la rotazione è stata applicata.

+0

La dimensione della tela deve essere maggiore o uguale alla larghezza dell'immagine. Altrimenti, i pixel al di fuori della risoluzione Canvas verranno visualizzati in nero anche se non lo sono. –