Ja bym zrobił tak:
- Dodał kontener z position: relative i overflow: hidden, zawierający i ramkę, i obrazek
- Dodał obraz właściwy do tego kontenera z position: absolute
- Dodał obrazek ramki do tego kontenera z position: absolute
W ten sposób masz ramkę na obrazie, pozostaje kwestia skalowania.
Czy obraz ma być ucinany zawsze ze środka?
Skalowanie ramki póki co pomijam, ale to też jest do obgadania, żeby była zawsze równomierna, tzn. miała taką samą grubość na wszystkich ściankach.
Obraz skalujesz według większej proporcji, czyli:
var proporcja = Math.max(wpisanaSzerokosc / oryginalnaSzerokosc, wpisanaWysokosc / oryginalnaWysokosc),
nowaSzerokosc = oryginalnaSzerokosc * proporcja,
nowaWysokosc = oryginalnaWysokosc * proporcja;
Nadajesz obrazkowi takie właśnie wymiary i w tym momencie masz największy mieszczący się fragment obrazu w ramce, ale zaczynając od lewego górnego rogu. Żeby wyśrodkować, musisz trochę matematyki znowu włączyć i przesunąć obraz właściwościami CSS
left i
top. Uwzględnij przy tym grubość ramki. Będzie trochę zabawy, ale efekt wyjdzie fajny