CSS wyświetla obraz o zmienionym rozmiarze i przyciętym rozmiarze

Chcę pokazać obraz z adresu URL o określonej szerokości i wysokości, nawet jeśli ma inny stosunek wielkości. Chcę więc zmienić rozmiar (zachowując proporcje), a następnie przyciąć obraz do żądanego rozmiaru.

Mogę zmienić rozmiar za pomocą właściwości html img i mogę ciąć za pomocą background-image.
Jak mogę zrobić jedno i drugie?

Przykład:

To zdjęcie:

Tutaj wpisz opis obrazka


Ma rozmiar 800x600 pikseli i chcę pokazać jak obraz 200x100 piksele


Z 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="/images/content/493296/5a3f6fd7a849b644649991b3943216d5.jpg">


I z background-image mogę wyciąć obraz 200x100 pikseli.

<div 
    style="background-image:
           url('/images/content/493296/5a3f6fd7a849b644649991b3943216d5.jpg'); 
    width:200px; 
    height:100px; 
    background-position:center;">&nbsp;</div>

Daje mi:

    <div style="background-image:url('/images/content/493296/5a3f6fd7a849b644649991b3943216d5.jpg'); width:200px; height:100px; background-position:center;">&nbsp;</div>


Jak mogę zrobić jedno i drugie?
Zmienić rozmiar obrazu, a następnie wyciąć go rozmiar chcę?

Author: MauriceNino, 2009-01-29

19 answers

Można użyć kombinacji obu metod np.

    .crop {
        width: 200px;
        height: 150px;
        overflow: hidden;
    }

    .crop img {
        width: 400px;
        height: 300px;
        margin: -75px 0 0 -100px;
    }
    <div class="crop">
        <img src="https://i.stack.imgur.com/wPh0S.jpg" alt="Donald Duck">
    </div>

Możesz użyć negative margin, aby przenieść obraz w <div/>.

 505
Author: roborourke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-28 14:14:10

Z CSS3 można zmienić rozmiar background-image z background-size, realizacja obu celów naraz.

Istnieje kilka przykładów na css3.info .

Zaimplementowano na podstawie przykładu , używając donald_duck_4.jpg. W tym przypadku {[4] } jest dokładnie tym, czego chcesz-pasuje do background-image, aby pokryć cały obszar zawierający <div> i zacisnąć nadmiar (w zależności od ratio).

.with-bg-size {
  background-image: url('https://i.stack.imgur.com/wPh0S.jpg');
  width: 200px;
  height: 100px;
  background-position: center;
  /* Make the background image cover the area of the <div>, and clip the excess */
  background-size: cover;
}
<div class="with-bg-size">Donald Duck!</div>

Css3 tło-obrazek background-size

 143
Author: Joel Purra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-29 09:25:27

Próbowałeś tego użyć?

.centered-and-cropped { object-fit: cover }

Musiałem zmienić rozmiar obrazu, wyśrodkować go (zarówno w pionie, jak i w poziomie), a następnie przyciąć.

Byłem szczęśliwy, że można to zrobić w jednej linii css. Sprawdź przykład tutaj: http://codepen.io/chrisnager/pen/azWWgr/?editors=110


Oto kod CSSi HTML z tego przykładu:

.centered-and-cropped { object-fit: cover }
<h1>original</h1>
<img height="200" src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/3174/bear.jpg" alt="Bear">
    
<h1>object-fit: cover</h1>
<img class="centered-and-cropped" width="200" height="200" 
style="border-radius:50%" src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/3174/bear.jpg" alt="Bear">
 115
Author: Anatolii Stepaniuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-01 14:17:27
.imgContainer {
  overflow: hidden;
  width: 200px;
  height: 100px;
}
.imgContainer img {
  width: 200px;
  height: 120px;
}
<div class="imgContainer">
  <img src="imageSrc" />
</div>

Zawierający div z zasadniczo przyciąć obraz, ukrywając przepełnienie.

 21
Author: Kelly Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 16:57:52
img {
  position: absolute;
  clip: rect(0px, 140px, 140px, 0px);
}
<img src="w3css.gif" width="100" height="140" />
 13
Author: Rohit Chaudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 16:57:37

Dzięki sanchothefat.

Mam ulepszenie twojej odpowiedzi. Ponieważ crop jest bardzo dopasowany do każdego obrazu, definicje te powinny znajdować się w HTML zamiast CSS.
<div style="overflow:hidden;">
   <img src="img.jpg" alt="" style="margin:-30% 0px -10% 0px;" />
</div>
 8
Author: Pedro Reis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-28 17:50:03
img {
    position: absolute;
    clip: rect(0px,60px,200px,0px);
} 
 6
Author: 151291,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-12 04:51:40

object-fit może Ci pomóc, jeśli grasz z <img> tag

Poniższy kod przyciąć obraz dla Ciebie. Możesz bawić się object-fit

img {
  object-fit: cover;
  width: 300px;
  height: 337px;
}
 6
Author: Hidayt Rahman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-14 06:23:50

Przykład Na Żywo: https://jsfiddle.net/de4Lt57z/

HTML:

<div class="crop">
  <img src="example.jpg" alt="..." />
</div>

CSS:

    .crop img{
      width:400px;
      height:300px;
      position: absolute;
      clip: rect(0px,200px, 150px, 0px);
      }

Explanation: Tutaj obraz jest zmieniany o szerokość i wysokość wartości obrazu. Kadrowanie odbywa się za pomocą właściwości klipu.

Aby uzyskać szczegółowe informacje na temat właściwości clip: http://tympanus.net/codrops/2013/01/16/understanding-the-css-clip-property/

 5
Author: Md. Rafee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-17 03:21:10

W klasie crop umieść Rozmiar obrazu, który chcesz wyświetlić:

.crop {
    width: 282px;
    height: 282px;
    overflow: hidden;
}
.crop span.img {
    background-position: center;
    background-size: cover;
    height: 282px;
    display: block;
}

Html będzie wyglądał następująco:

<div class="crop">
    <span class="img" style="background-image:url('http://url.to.image/image.jpg');"></span>
</div>
 4
Author: Deivide,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-25 19:52:03
<p class="crop"><a href="http://templatica.com" title="Css Templates">
    <img src="img.jpg" alt="css template" /></a></p> 

.crop {
    float: left;
    margin: .5em 10px .5em 0;
    overflow: hidden; /* this is important */
    position: relative; /* this is important too */
    border: 1px solid #ccc;
    width: 150px;
    height: 90px;
}
.crop img {
    position: absolute;
    top: -20px;
    left: -55px;
}
 3
Author: Sergey Chechaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-06 17:51:34

Spróbuj użyć właściwości clip-path:

Właściwość clip-path umożliwia przycinanie elementu do podstawowego kształtu lub do źródło SVG.

Uwaga: właściwość clip-path zastąpi przestarzały klip własność.

img {
  width: 150px;
  clip-path: inset(30px 35px);
}
<img src="http://i.stack.imgur.com/wPh0S.jpg">

Więcej przykładów tutaj .

 3
Author: Emerica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-05 07:58:29

Istnieją usługi takie jak Filestack, które zrobią to za Ciebie.

Pobierają adres URL Twojego obrazu i pozwalają zmienić jego rozmiar za pomocą parametrów url. To całkiem proste.

Twój obraz wyglądałby tak po zmianie rozmiaru do 200x100, ale zachowując proporcje

Cały url wygląda tak

https://process.filestackapi.com/AhTgLagciQByzXpFGRI0Az/resize=width:200/crop=d:[0,25,200,100]/https://i.stack.imgur.com/wPh0S.jpg

Ale ważną częścią jest tylko

resize=width:200/crop=d:[0,25,200,100]

Tutaj wpisz opis obrazka

 2
Author: ferrantim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-25 19:53:15

Można umieścić znacznik img w znaczniku div I zrobić oba, ale polecam przed skalowaniem obrazów w przeglądarce. Przez większość czasu robi kiepską robotę, ponieważ przeglądarki mają bardzo uproszczone algorytmy skalowania. Lepiej zrobić skalowanie w Photoshopie lub ImageMagick najpierw, a następnie podać go Klientowi ładnie i ładnie.

 1
Author: Dave Markle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 20:40:32

To, co zrobiłem, to stworzenie skryptu po stronie serwera, który zmieni rozmiar i przycina obraz na końcu serwera, aby wysyłał mniej danych przez interweb.

To dość banalne, ale jeśli ktoś jest zainteresowany, mogę wykopać i wrzucić kod (asp.net)

 1
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 20:46:05
<div class="crop">
    <img src="image.jpg"/>
</div>
.crop {
  width: 200px;
  height: 150px;
  overflow: hidden;
}
.crop img {
  width: 100%;
  /*Here you can use margins for accurate positioning of cropped image*/
}
 0
Author: Krone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 17:05:07

Jeśli używasz Bootstrap, spróbuj użyć { background-size: cover; } dla <div> może dać div klasy say <div class="example" style=url('../your_image.jpeg');> więc staje się div.example{ background-size: cover}

 0
Author: stacksonstacksonstacks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 19:32:37

Musiałem to zrobić niedawno. Chciałem zrobić miniaturkę-link 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 ogromną białą obwódkę u góry, więc jeśli przeskalujesz ją, aby utworzyć miniaturę, skończysz z obcymi białymi spacjami 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 najwyższe siedemdziesiąt pikseli to zbędny biały obszar graniczny. Potrzebowałem miniatury 348 × 172, bez dodatkowego obszaru granicznego na górze. Oznacza to, że żądana część oryginalnego obrazu ma wysokość 720-70 = 650 pikseli. Musiałem to przeskalować do 172 pikseli, czyli 172 / 650 = 26,5%. Oznaczało to, że 26,5% z 70 = 19 wierszy pikseli należało usunąć od góry skalowanego obraz.

Więc ...

  1. Ustaw wysokość = 172 + 19 = 191 pikseli:

    Wysokość=191

  2. Ustaw dolny margines na -19 pikseli (skracając obraz do wysokości 172 pikseli):

    Margin-bottom: - 19PX

  3. Ustaw górną pozycję na -19 pikseli (Przesunięcie obrazu w górę, tak aby górne wiersze 19 pikseli przepełniały się i były ukryte zamiast dolnych):

    Top:-19PX

The wynikowy HTML wygląda tak:

<a href="…" style="display:inline-block;overflow:hidden">
<img width=348 height=191 alt=""
style="border:0;position:relative;margin-bottom:-19px;top:-19px"
src="…"></a>

Jak widzisz, wybrałem styl zawierający znacznik , ale zamiast tego możesz stylować

 0
Author: Dave Burton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-22 20:52:50

Możesz użyć usługi Kodemu Zmiana rozmiaru obrazu . Możesz zmienić rozmiar dowolnego obrazu za pomocą połączenia http. Może być używany w przeglądarce lub w aplikacji produkcyjnej.

  • Załaduj obraz gdzieś, gdzie wolisz (S3, imgur itp.)
  • [5]} Podłącz go do dedykowanego adresu URL API (z naszego pulpitu nawigacyjnego)
 0
Author: Thellimist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-24 06:22:24