Samo wstawianie zdjęcia na stronę WWW to wcale nie jest oczywista sprawa a w rzeczywistości RWD dodatkowo komplikuje się i to mocno...
Niestety na pytanie jak wstawić zdjęcie w RWD, "żeby było dobrze" nie ma jednej odpowiedzi ani nawet nie da się napisać "jak zrobić to dobrze".
Cały proces wstawiania zdjęcia na stronę niemal zawsze składa się z części po stronie serwera jak i po stronie klienta. Po obu stronach trzeba wykonać czynności, które doprowadzą nas do zamierzonego celu.
Po stronie serwera::
Generalnie na przykładzie np. strony pisanej w PHP nie obejdzie się bez wspomagającej biblioteki, która potrafi przynajmniej skalować zdjęcia w trybach:
- wymuszone skalowanie do określonego rozmiaru dopuszczające zniekształcenie ( raczej rzadko używane )
- stała szerokość ;
- stała wysokość ;
- cropping ( przy podaniu wymiarów i automatycznym dopasowaniu do krótszej krawędzi ) ;
- ( dodatkowy bajer ) cropping inteligentny czyli taki, który potrafi wyszukać "istotny" fragment zdjęcia - często stoją za tym algorytmy sztucznej inteligencji ;
Taką bibliotekę można napisać samemu lub korzystać z gotowych. Ja korzystam z własnej jednak nie mam w niej croppingu inteligentnego... Do podstawowego szczęścia jednak wystarcza.
Taka biblioteka bezwzględnie musi obsługiwać także różne mechanizmy cacheo'wania bo:
- nie można skalować oryginału zdjęcia przy każdym wywołaniu strony ;
- nie warto wielokrotnie pobierać zdjęcia ze źródła ;
- nie warto trzymać cache tego samego zdjęcia wiele razy...
Żeby było mało to samo skalowanie nie powinno się odbywać w czasie generowania strony, a dopiero po przyjściu żądania o konkretne zdjęcie co zmusza nas do tworzenia odpowiednich plików "tymczasowych" zawierających informacje o docelowym zdjęciu a samo skalowanie, cacheowanie i przygotowanie zdjęcia w odpowiednim rozmiarze następuje dopiero po przyjściu żądania z przeglądarki... zatem trzeba jeszcze użyć np. .htaccess.
Warto też wiedzieć, że są specjalne płatne serwisy udostępniające API, które te czynności za nas wykonują włącznie z kompresją bazującą na AI ( sam PHP z libGD tak optymalnych rozmiarów nie uzyska ). Przykłady: www.contentful.com, cloudinary.com. Gdy pracujemy na dużych bazach zdjęć to rzecz warta uwagi...
No to serwer załatwiony a teraz przeglądarka :-)
Nawet jeśli już mamy wstępnie przygotowane odpowiednie zdjęcie po stronie serwera to nasza zabawa z wstawianiem zdjęcia wcale nie dobiegła do końca bo zdjęcie trzeba odpowiednio wyświetlić w kontenerze, w którym jest umieszczone, a ten może być raz szerszy raz wyższy, natomiast samo zdjęcie jakoś musi się prezentować. Na szczęście CSS daje już wiele sposobów pozycjonowania zdjęcia względem swojego kontenera i to już dużo ułatwia ale i tak tych sposobów jest dużo więc zawsze różnie można do sprawy podejść.
**Na koniec optymalizacja **... czyli tak naprawdę po stronie serwera czasem trzeba przygotować więcej niż jedno zdjęcie a to dlatego, że będziemy je wyświetlać w różnym układzie i w różnych rozdzielczościach zatem nie ma sensu pchać banera 1920px do klienta, który ma szerokość 320px...
No i na koniec dodam, że osobiście jestem zwolennikiem korzystania z mechanizmu "lazyLoad" bo to też daje widoczne oszczędności po stronie serwera.
To tak drogą wstępu i ogólnego nakreślenia tematu ;-)
Myślę, że na ten temat można by napisać dość długi i ciekawy artykuł...