I know a better algorithm(in terms of compactness, not speed) than the one you linked to is called MaxRects.
This was my implementation of it in C++. While not fast, it was very effective at packing compactly.
This is a pdf discussing and comparing all sorts of algorithms in terms of both time and compactness.
EDIT:
I threw together an example of an image packed using MaxRects .