2010-06-24 37 views
13

Necesito resolver el siguiente problema.¿Cómo superponer imágenes en javascript?

Tengo dos (o más) imágenes .PNG de las mismas dimensiones. Cada imagen PNG se crea con un color de fondo transparente.

Necesito mostrar img1 y sobre él img2, por lo que en lugares donde img2 tiene un color trancparent, se verá img1.

Por ejemplo: img1 parte superior rellena de color transparente y una vaca en la parte inferior. img2 parte superior contiene nubes y parte inferior llena de color transparente.

Quiero combinar estas dos imágenes y ver las nubes sobre la vaca.

Entiendo que necesito usar algún filtro cuando visualice ambas imágenes, pero no estoy seguro de cuál y qué parámetros usar.

+0

¿Necesita ejercer estrictamente que en JS o ¿Se puede utilizar otras herramientas (I estoy pensando en PHP/GD)? – nico

+3

Esto es algo que lograrías usando CSS en lugar de javascript –

Respuesta

3

No necesita utilizar ningún tipo de filtro (except in IE6).

Puede simplemente colocar elementos <img> uno encima del otro, usando CSS position: absolute para hacer que ambos elementos ocupen la misma área.

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

+0

Lo siento, no lo he mencionado: estoy en IE6 :( ¿Hay alguna manera de resolver esto? – Leo

+0

@Leo: Sí, necesitas usar un 'AlphaImageLoader' filtro. http://24ways.org/2007/supersleight-transparent-png-in-ie6 – SLaks

+0

Entendí que en IE6 necesito usar filtro, como: filter: progid: DXImageTransform.Microsoft.AlphaImageLoader (...); ¿Alguien puede escribir cómo hacerlo? Gracias – Leo

0

Puede probar configurando sus .style.position a "absoluta", les dan las mismas coordenadas con la izquierda y arriba (o hacia la derecha o inferior), y luego cambiar su índice z. Aunque es bastante sucio, y tal vez no funciona bien con tu página, pero no puedo pensar en otra solución.

15

Algo como esto debería funcionar (utilizando sólo 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; 
} 

Tenga en cuenta que IE6 no lo hace manejar la transparencia en PNG muy bien. Si necesita que funcione en IE6, deberá aplicar los filtros que mencionó. Este procedimiento es detailed here.

+0

utilicé el ejemplo (con CSS y HTML) y que siempre muestra la segunda imagen y No veo partes del primero que miren una. Mis imágenes definitivamente tienen fondo transparente, utilicé el siguiente PHP para crearlas:

$ resultImage = imagecreatetruecolor (100, 100); $ trans_colour = imagecolorallocatealpha ($ resultImage, 0, 0, 0, 127); imagefill ($ resultImage, 0, 0, $ trans_colour); Y luego pintor sobre la imagen con color no transparente.

Leo

+0

Sí, si está utilizando IE 6, necesitará agregar el filtro para que la transparencia funcione. – pkaeding

3

Si está utilizando jQuery probar esto en cualquier navegador

<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' /> 

y ajustar top & left valores

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

usando jQuery en este caso es como usar AK47 para matar una mosca. – rochal

+0

Utilicé style = "filter: progid: DXImageTransform.Microsoft.Alpha (Opacity = 50)" para cada imagen y ambas se ven a la mitad transperent una sobre la otra. Necesito un efecto completamente diferente: ver la segunda imagen 100% de opacidad, mientras que en los lugares donde tiene un color transparente, ver la primera imagen. – Leo

+0

Bueno, así es como mato a las moscas ... – Darthg8r

Cuestiones relacionadas