2010-06-24 3 views
13

Мне нужно решить следующую проблему.Как накладывать изображения в javascript?

У меня есть два (или более). PNG изображения одинаковых размеров. Каждое изображение PNG создается с прозрачным цветом фона.

Мне нужно отобразить img1 и на нем img2, поэтому в местах, где img2 имеет прозрачный цвет, будет отображаться img1.

Например: img1 верхняя часть заполнена прозрачным цветом и коровой на нижней части. img2 верхняя часть содержит облака и нижнюю часть, заполненную прозрачным цветом.

Я хочу объединить эти два изображения и увидеть облака над коровами.

Я понимаю, что мне нужно использовать какой-либо фильтр при отображении обоих изображений, но не знаю, какой из них и какие параметры его использовать.

+0

вам нужно сделать, чтобы строго сделать в JS или вы можете использовать другие инструменты (I Думаю, PHP/GD)? – nico

+3

Это то, чего вы бы достигли с помощью CSS, а не с javascript –

ответ

3

Вам не нужно использовать какой-либо фильтр (except in IE6).

Вы можете просто разместить до <img> элементов друг на друга, используя CSS position: absolute, чтобы оба элемента занимали одну и ту же область.

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

+0

Извините, я не сказал об этом: Я в IE6 :( Есть ли способ решить это? – Leo

+0

@Leo: Да, вам нужно использовать 'AlphaImageLoader' фильтр http://24ways.org/2007/supersleight-transparent-png-in-ie6 – SLaks

+0

Я понял, что в IE6 мне нужно использовать фильтр, например: filter: progid: DXImageTransform.Microsoft.AlphaImageLoader (...); Можно ли написать, как это сделать? – Leo

0

Вы можете попробовать установить их .style.position к «абсолютной», дать им одинаковые координаты с левой и верхней (справа или снизу), а затем изменить их Z-индекс. Хотя это довольно грязно, и, может быть, это плохо работает с вашей страницей, но я не могу придумать другого решения.

15

Что-то, как это должно работать (используя только 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; 
} 

Имейте в виду, что IE6 не эффективно обрабатывайте прозрачность в PNG. Если вам нужно, чтобы он работал в IE6, вам нужно будет применить фильтры, которые вы упомянули. Эта процедура: detailed here.

+0

Я использовал ваш пример (с CSS и HTML), и он всегда отображает второе изображение и Я не вижу частей первого взгляда. У моих изображений определенно есть прозрачный backgroung, я использовал следующий PHP для их создания:

$ resultImage = imagecreatetruecolor (100, 100); $ trans_colour = imagecolorallocatealpha ($ resultImage, 0, 0, 0, 127); imagefill ($ resultImage, 0, 0, $ trans_colour); И позже художник над изображением с непрозрачным цветом.

Leo

+0

Да, если вы используете IE 6, вам нужно будет добавить фильтр, чтобы сделать прозрачность вообще. – pkaeding

3

Если вы используете JQuery попробовать это в любом браузере

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

и настроить top & left значения

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

Использование jQuery в этом случае похоже на использование AK47 для уничтожения мухи. – rochal

+0

Я использовал стиль = "filter: progid: DXImageTransform.Microsoft.Alpha (Opacity = 50)" для каждого изображения, и они оба видны наполовину непрозрачными друг на друга. Мне нужно совершенно другое efect: см. Второе изображение 100% непрозрачность, в то время как в местах, где он имеет прозрачный цвет, см. Первое изображение. – Leo

+0

Ну, вот как я убиваю мух ... – Darthg8r

Смежные вопросы