ad 1.sposobów na wyswietlenie obrazków jest kilka: javascript, html, css. Tu nie ma problemu.
Jeśli chodzi o opcjonalne wyświetlenie, to wystarczy zrobić jakiegoś if'a który sprawdzi czy Twojemu artykułowi w bazie odpowiada jakiś obrazek. Jeżeli obrazek istnieje, to wyświelić, jeżeli nie, to nie. To też nie jest problem. Szczegółowo nie napiszę, bo na bazach się nie znam.
ad 2. Z tego co mi wiadomo, to biblioteka GD dla PHP ma możliwość zbadania wysokości obrazka. . Samo PHP dostarcza funkcje
getimagesize Powiedzmy, że masz tą wysokośc zwróconą przez funkcję imagesy() (czyli tą od biblioteki GD). Teraz sobie musisz ustalić stosunek długości tekstu do wysokosci obrazka. Powiedzmy, że w div'ie szerokim na 400px i wysokim na 200px (bo go 200 pikselowy obrazek rozepchał), mieści się 500 znaków tekstu obok obrazka. Ustalasz sobie stosunek wysokości do długości tekstu i tą zmienna wstawiasz go jako parametr do obcinania tekstu. To jest nieprawidłowe podejście, bo decydujesz o wyglądzie strony na poziomie PHP, a tak sie nie powinno robić.
Jak podzielisz 200 na 500, to wyjdzie 0,4. Pomnóż to przez 100 i masz parametr do obcinania tekstu. Gdy obrazek będzie wyższy to wtedy się zrobi 400 / 500 czyli dajesz 800 literek w tekście.
To jest podejście bardzo poglądowe i nieprecyzyjne. Ale może nasunie Ci jakis pomysł.
edit: a post pisany tuż przed snem więc wybacz składnię