@BoltClock It seemed the simplest way to code for the effect, a single a tag as opposed to one around the img and another around the text. The fact that it's supported by HTML 5 is a nice bonus.
–
FireflightAug 12 '11 at 21:36

You could do various things to avoid having to hard code the numbers if you want to. Some of these methods only work if you use a plain white background as they're really adding white on top rather than reducing opacity, but the first one should work fine for everything (as long as you aren't already using the psuedo-element for something, and you can set position to relative or absolute on the div).
Option 1: ::before psuedo-element:

I had a similar problem. I had 18 different divs working as buttons, and each with a different color. Rather than figure out the color codes for each or use a div:hover selector to change the opacity (which affects all children) I used the pseudo-class :before like in @Chris Boon's answer.

Because I wanted to do the coloring on the individual elements, I used :before to create a transparent white div on :hover. This is a very basic washout.