Quiero mostrar una imagen de una URL con un cierto ancho y alto, incluso si tiene una relación de tamaño diferente. Así que quiero cambiar el tamaño (manteniendo la relación) y luego cortar la imagen al tamaño que quiero.
Puedo cambiar el tamaño con la img
propiedad html y puedo cortar con background-image
.
¿Cómo puedo hacer las dos cosas?
Ejemplo:
Esta imagen:
Tiene el tamaño de 800x600
píxeles y quiero mostrar como una imagen de 200x100
píxeles
Con img
puedo cambiar el tamaño de la imagen 200x150px
:
<img
style="width: 200px; height: 150px;"
src="http://i.stack.imgur.com/wPh0S.jpg">
Eso me da esto:
<img style="width: 200px; height: 150px;" src="https://i.stack.imgur.com/wPh0S.jpg">
Y con background-image
puedo cortar los 200x100
píxeles de la imagen .
<div
style="background-image:
url('https://i.stack.imgur.com/wPh0S.jpg');
width:200px;
height:100px;
background-position:center;"> </div>
Me da
<div style="background-image:url('https://i.stack.imgur.com/wPh0S.jpg'); width:200px; height:100px; background-position:center;"> </div>
¿Cómo puedo hacer las dos cosas?
¿Cambiar el tamaño de la imagen y luego cortarla del tamaño que quiero?
fuente
Con CSS3 es posible cambiar el tamaño de un
background-image
conbackground-size
, cumpliendo ambos objetivos a la vez.Hay muchos ejemplos en css3.info .
Implementado según su ejemplo , usando donald_duck_4.jpg . En este caso,
background-size: cover;
es justo lo que desea: se ajustabackground-image
para cubrir toda el área del contenedor<div>
y recorta el exceso (dependiendo de la relación).css3 imagen de fondo tamaño de fondo
fuente
<img />
etiquetas, mireobject-fit: cover
y los valores relacionados de la especificación de valores de imagen CSS y módulo de contenido reemplazado de nivel 3 .¿Intentaste usar esto?
Necesitaba cambiar el tamaño de la imagen, centrarla (tanto vertical como horizontalmente) y luego recortarla.
Me alegró descubrir que se podía hacer en una sola línea CSS. Consulte el ejemplo aquí: http://codepen.io/chrisnager/pen/azWWgr/?editors=110
Aquí está el código
CSS
yHTML
de ese ejemplo:fuente
El div que contiene esencialmente recorta la imagen al ocultar el desbordamiento.
fuente
fuente
Gracias sanchothefat.
Tengo una mejora en tu respuesta. Como crop está muy adaptado para cada imagen, estas definiciones deben estar en HTML en lugar de CSS.
fuente
fuente
El siguiente código recortará su imagen por usted. Puedes jugar con el ajuste de objetos
fuente
Ejemplo en vivo: https://jsfiddle.net/de4Lt57z/
HTML:
CSS:
Explicación: Aquí la imagen cambia de tamaño según el valor de ancho y alto de la imagen. Y el recorte se realiza mediante la propiedad de clip.
Para obtener detalles sobre la propiedad del clip, siga: http://tympanus.net/codrops/2013/01/16/understanding-the-css-clip-property/
fuente
En la clase de recorte, coloque el tamaño de imagen que desea que aparezca:
El html se verá así:
fuente
fuente
Puede poner la etiqueta img en una etiqueta div y hacer ambas cosas, pero recomendaría no escalar imágenes en el navegador. Hace un trabajo pésimo la mayor parte del tiempo porque los navegadores tienen algoritmos de escala muy simplistas. Es mejor escalar primero en Photoshop o ImageMagick, y luego servirlo al cliente agradable y bonito.
fuente
Lo que he hecho es crear un script del lado del servidor que redimensionará y recortará una imagen en el extremo del servidor para que envíe menos datos a través del interweb.
Es bastante trivial, pero si alguien está interesado, puedo desenterrar y publicar el código (asp.net)
fuente
Hay servicios como Filestack que harán esto por usted.
Toman su url de imagen y le permiten cambiar su tamaño utilizando los parámetros de url. Es bastante fácil
Su imagen se vería así después de cambiar el tamaño a 200x100 pero manteniendo la relación de aspecto
Toda la url se ve así
pero la parte importante es solo
fuente
Intenta usar la
clip-path
propiedad:Más ejemplos aquí .
fuente
fuente
Si está usando Bootstrap, intente usar
{ background-size: cover; }
para<div>
tal vez darle al div una clase que diga<div class="example" style=url('../your_image.jpeg');>
para que se conviertadiv.example{ background-size: cover}
fuente
Necesitaba hacer esto recientemente. Quería hacer un enlace en miniatura a un gráfico NOAA. Como su gráfico podía cambiar en cualquier momento, quería que mi miniatura cambiara con él. Pero hay un problema con su gráfico: tiene un enorme borde blanco en la parte superior, por lo que si lo escala para hacer la miniatura, terminará con un espacio en blanco extraño en el documento.
Así es como lo resolví:
http://sealevel.info/example_css_scale_and_crop.html
Primero necesitaba hacer un poco de aritmética. La imagen original de NOAA es de 960 × 720 píxeles, pero los setenta píxeles superiores son un área de borde blanco superflua. Necesitaba una miniatura de 348 × 172, sin el área de borde adicional en la parte superior. Eso significa que la parte deseada de la imagen original es 720 - 70 = 650 píxeles de alto. Necesitaba reducir eso a 172 píxeles, es decir, 172/650 = 26.5%. Eso significaba que el 26,5% de 70 = 19 filas de píxeles debían eliminarse desde la parte superior de la imagen escalada.
Entonces…
Establezca la altura = 172 + 19 = 191 píxeles:
altura = 191
Establezca el margen inferior a -19 píxeles (acortando la imagen a 172 píxeles de alto):
margen inferior: -19px
Establezca la posición superior en -19 píxeles (desplazando la imagen hacia arriba, de modo que las filas superiores de 19 píxeles se desborden y se oculten en lugar de las inferiores):
arriba: -19px
El HTML resultante se ve así:
Como puede ver, elegí darle estilo a la etiqueta <a> que contiene, pero podría darle un estilo a <div>.
Un artefacto de este enfoque es que si muestra los bordes, faltará el borde superior. Como uso border = 0 de todos modos, eso no fue un problema para mí.
fuente
Puede usar el servicio de cambio de tamaño de imagen de Kodem . Puede cambiar el tamaño de cualquier imagen con solo una llamada http. Puede usarse casualmente en el navegador o en su aplicación de producción.
fuente