Chcę wyświetlić obraz z adresu URL o określonej szerokości i wysokości, nawet jeśli ma inny współczynnik rozmiaru. Chcę więc zmienić rozmiar (zachowując współczynnik), a następnie przyciąć obraz do pożądanego rozmiaru.
Mogę zmienić rozmiar za pomocą img
właściwości HTML i mogę wycinać background-image
.
Jak mogę to zrobić?
Przykład:
Ten obraz:
Ma rozmiar 800x600
pikseli i chcę pokazać jak obraz 200x100
pikseli
Dzięki img
mogę zmienić rozmiar obrazu 200x150px
:
<img
style="width: 200px; height: 150px;"
src="http://i.stack.imgur.com/wPh0S.jpg">
To daje mi to:
<img style="width: 200px; height: 150px;" src="https://i.stack.imgur.com/wPh0S.jpg">
I background-image
mogę wyciąć 200x100
piksele obrazu .
<div
style="background-image:
url('https://i.stack.imgur.com/wPh0S.jpg');
width:200px;
height:100px;
background-position:center;"> </div>
Daje mi:
<div style="background-image:url('https://i.stack.imgur.com/wPh0S.jpg'); width:200px; height:100px; background-position:center;"> </div>
Jak mogę to zrobić?
Zmienić rozmiar obrazu, a następnie przyciąć go do żądanego rozmiaru?
html
css
background-image
image
InfoStatus
źródło
źródło
Dzięki CSS3 można zmienić rozmiar
background-image
zbackground-size
, spełniając oba cele jednocześnie.Istnieje wiele przykładów na css3.info .
Zaimplementowano na podstawie Twojego przykładu , używając donald_duck_4.jpg . W tym przypadku
background-size: cover;
jest dokładnie tym, czego chcesz - pasujebackground-image
do pokrycia całego obszaru zawierającego<div>
i przycina nadmiar (w zależności od proporcji).css3 zdjęcie w tle rozmiar tła
źródło
<img />
tagów spójrz naobject-fit: cover
powiązane wartości ze specyfikacji CSS Image Values and Replaced Content Module Level 3 .Próbowałeś tego użyć?
Musiałem zmienić rozmiar obrazu, wyśrodkować (zarówno pionowo, jak i poziomo), a następnie przyciąć go.
Z przyjemnością stwierdziłem, że można tego dokonać w pojedynczej linii css. Sprawdź przykład tutaj: http://codepen.io/chrisnager/pen/azWWgr/?editors=110
Oto kod
CSS
iHTML
z tego przykładu:źródło
Zawierające div z zasadniczo przycinają obraz, ukrywając przepełnienie.
źródło
źródło
Dzięki sanchothefat.
Poprawiłem twoją odpowiedź. Ponieważ kadrowanie jest bardzo dostosowane do każdego obrazu, te definicje powinny znajdować się w kodzie HTML zamiast CSS.
źródło
źródło
Poniższy kod spowoduje przycięcie obrazu dla Ciebie. Możesz bawić się dopasowaniem do obiektu
źródło
Przykład na żywo: https://jsfiddle.net/de4Lt57z/
HTML:
CSS:
Objaśnienie: W tym przypadku rozmiar obrazu jest zmieniany na podstawie szerokości i wysokości obrazu. I przycinanie odbywa się za pomocą właściwości klipu.
Aby uzyskać szczegółowe informacje na temat właściwości klipu, wykonaj następujące czynności: http://tympanus.net/codrops/2013/01/16/understanding-the-css-clip-property/
źródło
W klasie przycinania umieść rozmiar obrazu, który chcesz wyświetlić:
HTML będzie wyglądał następująco:
źródło
źródło
Możesz umieścić tag img w tagu div i zrobić oba, ale odradzam skalowanie obrazów w przeglądarce. Wykonuje kiepską pracę przez większość czasu, ponieważ przeglądarki mają bardzo uproszczone algorytmy skalowania. Lepiej najpierw skaluj w Photoshopie lub ImageMagick, a następnie podaj je klientowi ładnie i ładnie.
źródło
To, co zrobiłem, to stworzenie skryptu po stronie serwera, który zmieni rozmiar i przyci zdjęcie po stronie serwera, aby wysyłał mniej danych przez sieć.
To dość trywialne, ale jeśli ktoś jest zainteresowany, mogę wykopać i opublikować kod (asp.net)
źródło
Istnieją usługi takie jak Filestack, które zrobią to za Ciebie.
Pobierają adres URL obrazu i pozwalają na zmianę jego rozmiaru za pomocą parametrów adresu URL. To całkiem proste.
Twój obraz wyglądałby tak po zmianie rozmiaru do 200 x 100, ale z zachowaniem proporcji
Cały adres URL wygląda tak
ale ważna część jest sprawiedliwa
źródło
Spróbuj użyć
clip-path
właściwości:Więcej przykładów tutaj .
źródło
źródło
Jeśli używasz Bootstrap, spróbuj użyć
{ background-size: cover; }
dla<div>
być może div, aby klasa powiedziała<div class="example" style=url('../your_image.jpeg');>
, że tak się staniediv.example{ background-size: cover}
źródło
Musiałem to ostatnio zrobić. Chciałem zrobić link do miniatury do wykresu NOAA. Ponieważ ich wykres może się zmienić w dowolnym momencie, chciałem, aby moja miniatura zmieniła się wraz z nim. Ale jest problem z ich wykresem: ma wielką białą ramkę u góry, więc jeśli przeskalujesz go, aby miniatura zakończyła się obcym białym znakiem w dokumencie.
Oto jak to rozwiązałem:
http://sealevel.info/example_css_scale_and_crop.html
Najpierw musiałem zrobić trochę arytmetyki. Oryginalny obraz z NOAA ma wymiary 960 × 720 pikseli, ale siedemdziesiąt najlepszych pikseli to zbędny biały obszar obramowania. Potrzebowałem miniatury 348 × 172, bez dodatkowego obszaru obramowania u góry. Oznacza to, że pożądana część oryginalnego obrazu ma 720–70 = 650 pikseli wysokości. Musiałem zmniejszyć to do 172 pikseli, tj. 172/650 = 26,5%. Oznaczało to, że 26,5% z 70 = 19 rzędów pikseli wymagało usunięcia z góry skalowanego obrazu.
Więc…
Ustaw wysokość = 172 + 19 = 191 pikseli:
wysokość = 191
Ustaw dolny margines na -19 pikseli (skracając obraz do wysokości 172 pikseli):
margines na dole: -19px
Ustaw górną pozycję na -19 pikseli (przesuwając obraz w górę, tak aby górne rzędy 19 pikseli przepełniały się i były ukryte zamiast dolnych):
góra: -19px
Powstały HTML wygląda następująco:
Jak widać, wybrałem styl zawierający znacznik <a>, ale zamiast tego możesz stylizować <div>.
Jednym z artefaktów tego podejścia jest to, że jeśli pokażesz granice, górnej granicy nie będzie. Ponieważ i tak używam border = 0, nie było to dla mnie problemem.
źródło
Możesz skorzystać z usługi zmiany rozmiaru obrazu Kodem . Możesz zmienić rozmiar dowolnego obrazu za pomocą połączenia HTTP. Może być używany od czasu do czasu w przeglądarce lub w aplikacji produkcyjnej.
źródło