Quero mostrar uma imagem de um URL com uma certa largura e altura, mesmo que tenha uma proporção de tamanho diferente. Então, eu quero redimensionar (mantendo a proporção) e depois cortar a imagem para o tamanho desejado.
Eu posso redimensionar com a img
propriedade html e posso cortar com background-image
.
Como posso fazer as duas coisas?
Exemplo:
Esta imagem:
Tem o tamanho de 800x600
pixels e eu quero mostrar como uma imagem de 200x100
pixels
Com img
eu posso redimensionar a imagem 200x150px
:
<img
style="width: 200px; height: 150px;"
src="http://i.stack.imgur.com/wPh0S.jpg">
Isso me dá o seguinte:
<img style="width: 200px; height: 150px;" src="https://i.stack.imgur.com/wPh0S.jpg">
E com background-image
eu posso cortar os 200x100
pixels da imagem .
<div
style="background-image:
url('https://i.stack.imgur.com/wPh0S.jpg');
width:200px;
height:100px;
background-position:center;"> </div>
Dá-me:
<div style="background-image:url('https://i.stack.imgur.com/wPh0S.jpg'); width:200px; height:100px; background-position:center;"> </div>
Como posso fazer as duas coisas?
Redimensionar a imagem e cortá-la do tamanho que eu quero?
fonte
Com o CSS3, é possível alterar o tamanho de um
background-image
combackground-size
, cumprindo os dois objetivos ao mesmo tempo.Existem vários exemplos em css3.info .
Implementado com base no seu exemplo , usando donald_duck_4.jpg . Nesse caso,
background-size: cover;
é exatamente o que você deseja - ele servebackground-image
para cobrir toda a área do contêiner<div>
e cortar o excesso (dependendo da proporção).css3 imagem de fundo tamanho do plano de fundo
fonte
<img />
tags, observeobject-fit: cover
e valores relacionados da especificação CSS Image Values e Substituído Conteúdo Módulo Nível 3 .Você tentou usar isso?
Eu precisava redimensionar a imagem, centralizar (vertical e horizontalmente) e depois cortá-la.
Fiquei feliz em descobrir que isso poderia ser feito em uma única linha de css. Veja o exemplo aqui: http://codepen.io/chrisnager/pen/azWWgr/?editors=110
Aqui está o código
CSS
eHTML
desse exemplo:fonte
A div que contém essencialmente corta a imagem ocultando o estouro.
fonte
fonte
Obrigado sanchothefat.
Eu tenho uma melhoria na sua resposta. Como o recorte é muito personalizado para todas as imagens, essas definições devem estar no HTML, e não no CSS.
fonte
fonte
O código abaixo cortará sua imagem para você. Você pode brincar com o ajuste do objeto
fonte
Exemplo ao vivo: https://jsfiddle.net/de4Lt57z/
HTML:
CSS:
Explicação: Aqui a imagem é redimensionada pelo valor de largura e altura da imagem. E a colheita é feita pela propriedade do clipe.
Para obter detalhes sobre a propriedade do clipe, siga: http://tympanus.net/codrops/2013/01/16/understanding-the-css-clip-property/
fonte
Na classe de corte, coloque o tamanho da imagem que deseja que apareça:
O html será parecido com:
fonte
fonte
Você pode colocar a tag img em uma tag div e fazer as duas coisas, mas eu recomendaria não dimensionar imagens no navegador. Ele faz um trabalho ruim na maioria das vezes porque os navegadores têm algoritmos de escala muito simplistas. Melhor fazer a escala no Photoshop ou no ImageMagick primeiro e depois atendê-lo ao cliente de maneira agradável e bonita.
fonte
O que eu fiz foi criar um script do lado do servidor que redimensione e corte uma imagem na extremidade do servidor, para enviar menos dados pela interweb.
É bastante trivial, mas se alguém estiver interessado, posso desenterrar e postar o código (asp.net)
fonte
Existem serviços como o Filestack que farão isso por você.
Eles pegam o URL da imagem e permitem redimensioná-lo usando parâmetros de URL. É bem fácil
Sua imagem ficaria assim depois de redimensionar para 200 x 100, mas mantendo a proporção
O URL inteiro se parece com isso
mas a parte importante é apenas
fonte
Tente usar a
clip-path
propriedade:Mais exemplos aqui .
fonte
fonte
Se você estiver usando o Bootstrap, tente usar
{ background-size: cover; }
para<div>
talvez dar uma classe à div,<div class="example" style=url('../your_image.jpeg');>
para que ela se tornediv.example{ background-size: cover}
fonte
Eu precisava fazer isso recentemente. Eu queria fazer um link em miniatura para um gráfico NOAA. Como o gráfico pode mudar a qualquer momento, eu queria que minha miniatura mudasse. Mas há um problema com o gráfico: ele tem uma borda branca enorme na parte superior; portanto, se você apenas a escala para criar a miniatura, acaba com espaços em branco estranhos no documento.
Aqui está como eu resolvi:
http://sealevel.info/example_css_scale_and_crop.html
Primeiro eu precisava fazer um pouco de aritmética. A imagem original da NOAA tem 960 × 720 pixels, mas os setenta pixels superiores são uma área de borda branca supérflua. Eu precisava de uma miniatura de 348 × 172, sem a área de borda extra na parte superior. Isso significa que a parte desejada da imagem original tem 720 - 70 = 650 pixels de altura. Eu precisava escalar isso para 172 pixels, ou seja, 172/650 = 26,5%. Isso significava que 26,5% de 70 = 19 linhas de pixels precisavam ser excluídas da parte superior da imagem em escala.
Assim…
Defina a altura = 172 + 19 = 191 pixels:
height = 191
Defina a margem inferior para -19 pixels (encurte a imagem para 172 pixels de altura):
margem inferior: -19px
Defina a posição superior para -19 pixels (deslocando a imagem para cima, de modo que as 19 linhas principais do pixel transbordem e fiquem ocultas em vez das inferiores):
top: -19px
O HTML resultante é assim:
Como você pode ver, eu escolhi o estilo da tag <a>, mas você pode estilizar um <div>.
Um artefato dessa abordagem é que, se você mostrar as bordas, a borda superior estará ausente. Desde que eu uso border = 0 de qualquer maneira, isso não foi um problema para mim.
fonte
Você pode usar o Serviço de redimensionamento de imagem da Kodem . Você pode redimensionar qualquer imagem com apenas uma chamada http. Pode ser usado casualmente no navegador ou no aplicativo de produção.
fonte