Если вы хотите сделать это с помощью JavaScript и не возражаете, что он будет работать только с браузерами, поддерживающими canvas, вот функция, которая должна решить эту проблему:
function isBlack(cId, iId) {
var blackThreshold = 127;
var c = document.getElementById(cId);
var i = document.getElementById(iId);
c.width = i.width;
c.height = i.height;
var cxt = c.getContext('2d');
cxt.clearRect(0,0, c.width-1, c.height-1);
var img = new Image();
img.src = i.src;
cxt.drawImage(img,0,0);
var imgd = cxt.getImageData(0, 0, c.width-1, c.height-1);
var pix = imgd.data;
var total = 0;
for (var i = 0; n = pix.length, i < n; i += 4) {
total += pix[i]+pix[i+1]+pix[i+2];
}
blackThreshold = (pix.length * .75) * blackThreshold;
return (total < blackThreshold);
}
Обратите внимание, что это быстро и грязно и, вероятно, требует много очистки, но я проверил это, и он делает то, что вы просили. Для справки вот HTML-код, который я использовал при тестировании:
<canvas id="dummyCanvas" style="display: none;"></canvas>
<div>
<img id="white" src="Hood_canal_2.jpg" />
<h1 id="whiteText" style="margin-top: -200px; margin-bottom: 200px;">Text</h1>
</div>
<div>
<img id="black" src="bw47.jpg" />
<h1 id="blackText" style="margin-top: -200px; margin-bottom: 200px;">Text</h1>
</div>