There's a challenging CSS solution that comes to mind, but it's quite complex.
Imagine your image is 100px wide. You would need to create a div that is also 100px wide and populate it with 100 children, each 1px wide. Each child would have the same background positioned accordingly, and their opacity would range from 0 (the first child) to .99 (the last child).
Personally, I find this method to be quite impractical and wouldn't recommend using it.
Rory O'Kane proposed a cleaner solution, and I have another idea that involves utilizing JavaScript.
The concept revolves around using a canvas element (check browser support here), drawing your image onto it, looping through its pixels, and adjusting the alpha value for each pixel.
(Scroll down to view the outcome)
Here's the relevant HTML:
<div class='parent'>
<canvas id='c' width='575' height='431'></canvas>
</div>
And relevant CSS (setting the background image on the parent):
.parent {
background: url(parent-background.jpg);
}
Now, here's the JavaScript snippet:
window.onload = function() {
var c = document.getElementById('c'),
ctxt = c.getContext('2d'),
img = new Image();
img.onload = function() {
ctxt.drawImage(img, 0, 0);
var imageData = ctxt.getImageData(0, 0, 575, 431);
for(var i = 0, n = imageData.data.length; i < n; i += 4) {
imageData.data[i + 3] = 255*((i/4)%575)/575;
}
ctxt.putImageData(imageData, 0, 0);
};
/* Images drawn onto the canvas must be hosted on the same web server
with the same domain as the executing code */
/* Alternatively, they can be encoded similarly to the demo */
img.src = 'image-drawn-on-canvas.jpg';
};