I've taken a couple of passport and visa photos over the past few months for N, my brother, and now for me. I have a pretty good pipeline down: take the photo against the white bathroom door, crop it in iPhoto or Preview, scale two copies to size and align them in Inkscape, export them as a 4x6 jpeg, load it to a usb, and print it for 42 cents at the local Fedex office store (this last bit takes all of 3 minutes with their auto-serve booths). This is both the cheapest and the fastest way I've found to get passport-type photos--about a 1 hour turnaround (mostly for transit to and from the store) for 42 cents.
In comparison, I feel like most other places are ripping you off. Walgreens does the whole thing for $10, as does CVS, though they're both running coupon promotionals to take it down $1-2. If you take the photo yourself, this site has a "pro" service for $7.99, that basically confirms you took and cropped a decent photo, and mails prints to you. They alternatively point you to shutterfly, where you can order free prints if you're a first-time user, but I've already used up my free prints and I don't want to wait for the mail.
The upside of the epassports website is that you can upload your photo and check its dimensions as if you were going to print it through them. Then, if you avoid their "pro" marketing by hitting the minuscule "skip" or "no thanks" at the bottom of various screens, you can download a jpeg (for free) with 4 properly scaled images to print either with Shutterfly or Fedex or wherever. This bypasses what I've been doing with iPhoto and Inkscape. Next time, I'll be using this; it would chop off 15 minutes from the turnaround time.