2012-04-04 11 views
5

Sto disegnando un'immagine utilizzando dati di pixel RGB. Devo impostare un colore di sfondo trasparente per quell'immagine. Quale valore posso impostare affinché alpha sia un'immagine trasparente? O c'è qualche altra soluzione per questo?HTML5 come disegnare un'immagine di pixel trasparente su tela

+0

correlati: http://stackoverflow.com/questions/2916938/how-to-draw-transparent-image-with-html5-canvas-element – Nobita

risposta

7

Se ho capito di cosa hai bisogno, in pratica vuoi trasformare i colori specifici su un'immagine trasparente. Per fare ciò è necessario utilizzare getImageData check out mdn for an explanation on pixel manipulation.

Heres alcuni esempi di codice

var imgd = ctx.getImageData(0, 0, imageWidth, imageHeight), 
    pix = imgd.data; 

for (var i = 0, n = pix.length; i <n; i += 4) { 
    var r = pix[i], 
     g = pix[i+1], 
     b = pix[i+2]; 

    if(g > 150){ 
     // If the green component value is higher than 150 
     // make the pixel transparent because i+3 is the alpha component 
     // values 0-255 work, 255 is solid 
     pix[i + 3] = 0; 
    } 
} 

ctx.putImageData(imgd, 0, 0);​ 

And a working demo

Con il codice di cui sopra si potrebbe verificare la presenza di fucsia utilizzando

if(r == 255 && g == 0 && b == 255)

+0

Dopo aver disegnato l'immagine pixel, devo spostare quell'immagine su evento mousemove. Quando sposto quell'immagine, posso vedere un rettangolo bianco attorno a quell'immagine. Ho bisogno di evitarlo. O c'è un modo per spostare l'immagine da sola al posto del rettangolo di pixel? – Joe

+0

Dovresti fare quanto sopra, eccetto cercare i pixel che hanno un rgb di 255.255.255 (bianco). Guarda il jsfiddle, crea un elemento canvas temporaneo e ne disegna i risultati. Questo è quello che dovresti fare. Faresti la manipolazione dei pixel e userai 'putImageData' per mettere i dati su una nuova tela, e questo è ciò che vuoi spostare invece dell'immagine. – Loktar

+1

Dopo aver disegnato l'immagine sull'elemento temp canvas, ho usato il codice seguente e il mio problema è risolto. Grazie per il tuo aiuto. var imgURL = tempCanvas.toDataURL(); var myImage = new Image(); myImage.src = imgURL; context.drawImage (myImage, xPos, yPos); – Joe

0

un alfa di 0 indica che il pixel è completamente trasparente un valore alfa di 255 è completamente opaco, il che significa che non avrà trasparenza.

se le porzioni dell'immagine sono completamente trasparenti (un alfa di 0) non importa ciò che si utilizza per i valori RGB purché si usi un alfa di 0. Su una nota si vedano alcuni vecchi programmi di Windows che hai usato come presupposto un pixel in alto a sinistra o il pixel in basso a destra come colore della trasparenza. Avrebbe quindi eseguito il ciclo di tutti i pixel e impostato l'alfa su 0 quando ha incontrato questo specifico valore RGB.

Se si utilizza un Alpha di 127 e l'immagine è stata visualizzata sopra un'altra immagine, le due immagini saranno ugualmente visibili o l'immagine in basso sta perdendo il 50% dei suoi colori fino all'immagine superiore.

Impostare una variabile per alfa se si desidera verificare e vedere come appare quando lo si applica all'intera immagine.

+0

Quando ho impostato 0 per l'alfa in tutti i pixel, la mia porzione di immagine ruota completamente al bianco. – Joe

Problemi correlati