vertical-align jest wspierane całkiem nieźle, ale służy zwykle do czegoś innego. Wyrównuje elementy generujące ramkę wierszową (inline) względem danego wiersza. Jeśli wiersz w tym divie ma np. 20 pikseli wysokości, to vertical-align: bottom wyrówna obrazek do dołu, ale tylko do dołu tego wiersza, czyli nie dalej niż to 20px. Albo będzie inaczej: obrazek będzie wyższy niż normalnie wiersz by był i ramka wiersza zostanie rozciągnięta w pionie, a obrazek wyląduje na jej dole. W sumie może to wyglądać tak, jakby vertical-align nic nie dało.
Trzeba rozpatrywać każdy przypadek z osobna. position: relative to zły pomysł. position: absolute oraz left i top to też zły pomysł. Oba te rozwiązania nie zapewniają elastyczności niezbędnej gdy obrazek może mieć różną wysokość (a autor wspomniał, że tak właśnie jest).
Jedno z właściwych rozwiązań to ustawienie obrazkowi position: absolute oraz bottom: 0 (należy pamiętać, by element zawierający -- czyli ten div -- otrzymał position: relative).
Jeśli w elemencie zawierającym ma nie być żadnego tekstu, to można nawet się przehackować się z tym vertical-align: bottom. Trzeba jednak wtedy ustawić elementowi zawierającemu (divowi) line-height: 200px. Wtedy cały div jest jednym wielkim wierszem, a obrazek zostanie wyrównany do jego dolnej krawędzi. Naturalnie, może to wyglądać idiotycznie jeśli w divie oprócz obrazka jest jakiś tekst (bo tekst będzie wyświetlany w liniach o wysokości 200px; w przypadku pojedynczej linii tekst będzie wyglądał na wyśrodkowany w pionie).
Proponuję więc kombinację position: absolute i bottom: 0 dla obrazka, plus position: relative dla diva.