When I want a background image to look semi-transparent, and there's no other images or stuff underneath that need to show through, I create a fake semi-trans png in my image editor and flatten it.
Meaning, if the website background colour is white, and I need a faded-looking background image sitting on top of it, I just place a white layer under the image, lower opacity on the image on the upper layer, merge, flatten to 8-bit png if possible (if I need more colours I don't, but I still remove the alpha layer), upload. Much smaller filesize than a real semi-trans png.
But if I need an image to be full-colour and only faded when peeking through a container sitting on top (like a centered main content box), I can do one of two things:
use a small and tiled semi-trans png (like 8x8 or some multiples of 8 vert and 4 horiz) and let it tile the background of the container (this means IE6 gets a solid colour, you set this by saving your semi-trans png with the desired colour sitting as the background colour in your colour pallette), OR use CSS rgba(); background colour with a solid colour stated before that for IE6 and 7 (and 8?). More IE's get a solid colour but frankly, solid colours are easier to read on anyway. IE users get more win.