Ich hatte mal mit einer längst vergessenen Komponente so etwas in der Richtung versucht:
https://www.delphipraxis.net/176186-...omponente.html
Deine Zielstellung ist allerdings recht unscharf formuliert.
Man muss im Einzelfall da sicherlich noch viele Fälle unterscheiden, wann etwas komprimiert, umgebrochen, auseinandergezogen oder verschoben werden darf.
Eine allgemeine Antwort wird also schwierig sein.