2010-06-24 4 views
13

Ho bisogno di risolvere il seguente problema.Come sovrapporre le immagini in javascript?

Ho due (o più) immagini .PNG delle stesse dimensioni. Ogni immagine PNG viene creata con un colore di sfondo trasparente.

ho bisogno di visualizzare img1 e su di essa img2, quindi in luoghi dove img2 ha colore trancparent, img1 si vedrà.

Ad esempio: parte superiore img1 riempito con colore trasparente e una mucca in parte verso il basso. La parte superiore di img2 contiene nuvole e parti inferiori piene di colore trasparente.

Voglio combinare queste due immagini e vedere le nuvole sopra la mucca.

ho capito che ho bisogno di usare qualche filtro quando la visualizzazione di entrambe le immagini, ma non è sicuro che uno e quali parametri di esso da usare.

+0

Avete bisogno di fare rigorosamente che in JS o si può utilizzare altri strumenti (I sto pensando a PHP/GD)? – nico

+3

Questo è qualcosa che si otterrebbe utilizzando CSS piuttosto che javascript –

risposta

3

Non è necessario utilizzare alcun tipo di filtro (except in IE6).

È possibile posizionare semplicemente gli elementi <img> uno sopra l'altro, utilizzando i fogli di stile position: absolute per far sì che entrambi gli elementi occupino la stessa area.

In IE6, you'll need an AlphaImageLoader filter simply to display the PNGs with transparency

+0

Spiacente, non l'ho menzionato: I am in IE6 :( C'è un modo per risolvere questo? – Leo

+0

@Leo: Sì, è necessario utilizzare un 'AlphaImageLoader' . Filtro http://24ways.org/2007/supersleight-transparent-png-in-ie6 – SLaks

+0

ho capito che in IE6 ho bisogno di usare il filtro, come: Filtro: progid: DXImageTransform.Microsoft.AlphaImageLoader (...); Qualcuno può scrivere come si fa? grazie – Leo

0

Si può provare modificando la loro .style.position a "assoluto", dare loro le stesse coordinate con sinistra e in alto (o verso destra o inferiore) e quindi modificare il loro indice z. Anche se è abbastanza sporco, e forse non funziona bene con la tua pagina, ma non riesco a pensare ad un'altra soluzione.

15

Qualcosa del genere dovrebbe funzionare (utilizzando solo HTML/CSS):

HTML:

<div class="imageWrapper"> 
    <img class="overlayImage" src="cow.png"> 
    <img class="overlayImage" src="clouds.png"> 
    <img class="overlayImage" src="downpart.png"> 
</div> 

CSS:

.imageWrapper { 
    position: relative; 
} 
.overlayImage { 
    position: absolute; 
    top: 0; 
    left: 0; 
} 

Tenete a mente che IE6 non lo fa gestire la trasparenza in PNG molto bene. Se hai bisogno che funzioni in IE6, dovrai applicare i filtri che hai menzionato. Questa procedura è detailed here.

+0

Ho usato il tuo esempio (con CSS e HTML) e visualizza sempre la seconda immagine e Non vedo parti del primo che guarda attraverso. Le mie immagini hanno sicuramente un backgroung trasparente, ho usato il seguente PHP per crearle:

$ resultImage = imagecreatetruecolor (100, 100); $ trans_colour = imagecolorallocatealpha ($ resultImage, 0, 0, 0, 127); imagefill ($ resultImage, 0, 0, $ trans_colour); E in seguito pittore sull'immagine con un colore non trasparente.

Leo

+0

Sì, se si utilizza IE 6, quindi sarà necessario aggiungere il filtro per fare in modo che la trasparenza funzioni. – pkaeding

3

Se si utilizza jQuery provare questo in qualsiasi browser

<script> 
$(function() { 
    var position = $("#i1").offset(); 
    $('#i2').css({ position:'absolute', top:position.top, left: position.left}); 
}); 
</script> 
<img id='i1' src='images/zap_ring.png' /> 
<img id='i2' src='images/zap_ring_hover.png' /> 

e regolare top & left valori

$('#i2').css({ position:'absolute', top:position.top-10, left: position.left+5}); 
+4

utilizzando jQuery in questo caso è come usare AK47 per uccidere una mosca. – rochal

+0

Ho usato style = "filter: progid: DXImageTransform.Microsoft.Alpha (Opacity = 50)" per ogni immagine e sono entrambi visti mezzo transperent uno sull'altro. Ho bisogno di efetti completamente diversi: vedere la seconda immagine 100% di opacità mentre nei luoghi in cui ha il colore trasparente vedere la prima immagine. – Leo

+0

Beh, è ​​così che uccido le mosche ... – Darthg8r