Imágenes
¡Astro ofrece varias formas para que uses imágenes en tu sitio, ya sea que estén almacenadas localmente dentro de tu proyecto, enlazadas desde una URL externa o gestionadas en un CMS o CDN!
Dónde guardar las imágenes
Sección titulada Dónde guardar las imágenessrc/
vs. public/
Sección titulada src/ vs. public/Recomendamos que las imágenes locales se mantengan en src/
cuando sea posible, para que Astro pueda transformar, optimizar y empaquetarlas. Los archivos en el directorio /public
siempre se sirven o copian tal como están en la carpeta de construcción, sin ningún procesamiento.
Tus imágenes locales almacenadas en src/
pueden ser utilizadas por todos los archivos en tu proyecto: .astro
, .md
, .mdx
, .mdoc
y otros frameworks UI. Las imágenes pueden almacenarse en cualquier carpeta, incluida junto a tu contenido.
Almacena tus imágenes en la carpeta public/
si deseas evitar cualquier tipo de procesamiento o para tener un enlace público directo a ellas.
Imágenes remotas
Sección titulada Imágenes remotasTambién puedes optar por almacenar tus imágenes de forma remota, en un sistema de gestión de contenido (CMS) o en una plataforma de gestión de assets digitales (DAM).
Para una protección adicional al tratar con fuentes externas, las imágenes remotas solo se procesarán desde fuentes de imágenes autorizadas especificadas en tu configuración. Sin embargo, cualquier imagen remota puede ser mostrada.
Astro puede obtener tus datos de forma remota utilizando APIs o mostrar imágenes desde su ruta completa de URL. Consulta nuestras guías de CMS para ejemplos de integración con servicios comunes.
Imágenes en archivos .astro
Sección titulada Imágenes en archivos .astroEn archivos .astro
, las imágenes locales deben ser importadas al archivo para poder ser utilizadas. Las imágenes remotas y las imágenes en public/
no requieren ser importadas
Importa y utiliza el componente incorporado <Image />
de Astro para imágenes optimizadas usando astro:assets
. Alternativamente, la sintaxis de Astro admite escribir directamente una etiqueta HTML <img>
, lo que omite el procesamiento de imágenes
Para importar imágenes dinámicamente desde la carpeta src/
, consulta la siguiente receta:
<Image />
(astro:assets
)
Sección titulada <Image /> (astro:assets)Utiliza el componente integrado <Image />
de Astro para mostrar versiones optimizadas de tus imágenes locales y imágenes remotas configuradas.
Las imágenes en la carpeta public/
, así como las imágenes remotas no configuradas específicamente en tu proyecto, también se pueden usar con el componente Image, pero no se procesarán.
<Image />
puede transformar las dimensiones, el tipo de archivo y la calidad de una imagen local o remota autorizada para un control sobre la imagen que se muestra. La etiqueta resultante <img>
incluye atributos alt
, loading
y decoding
, e infiere las dimensiones de la imagen para evitar el Desplazamiento Acumulativo de Diseño (CLS).
Desplazamiento Acumulativo de Diseño (CLS) es una métrica de Core Web Vital para medir cuánto se ha desplazado el contenido de tu página durante la carga. El componente <Image />
optimiza para el CLS al establecer automáticamente el ancho
y el alto
correctos para tus imágenes locales.
Actualmente, la característica integrada de assets no incluye un componente <Picture />
.
En su lugar, puedes generar imágenes o componentes personalizados usando getImage()
que utilicen los atributos HTML de imagen srcset
y sizes
o la etiqueta <picture>
para la dirección de arte o para crear imágenes responsivas.
Propiedades
Sección titulada Propiedadessrc (requerido)
Sección titulada src (requerido)El formato del valor src
de tu archivo de imagen depende de dónde esté ubicado tu archivo de imagen:
-
Imágenes locales en
src/
- también debes importar la imagen utilizando una ruta de archivo relativa o configurar y usar un alias de importación. Luego usa el nombre de importación como valor desrc
: -
Imágenes en la carpeta
public/
- utiliza la ruta de archivo de la imagen relativa a la carpeta public: -
Imágenes remotas - utiliza la URL completa de la imagen como valor de la propiedad:
alt (requerido)
Sección titulada alt (requerido)Utiliza el atributo alt
requerido para proporcionar un texto alternativo descriptivo para las imágenes.
Si una imagen es meramente decorativa (es decir, no contribuye a la comprensión de la página), establece alt=""
para que los lectores de pantalla y otras tecnologías de asistencia sepan que deben ignorar la imagen.
width y height (requerido para imágenes en public/
)
Sección titulada width y height (requerido para imágenes en public/)Estas propiedades definen las dimensiones a utilizar para la imagen.
Cuando se utilizan imágenes en su relación de aspecto original, width
y height
son opcionales. Estas dimensiones pueden inferirse automáticamente de archivos de imagen ubicados en src/
y de imágenes remotas con inferSize
establecido en true
.
Sin embargo, ambas de estas propiedades son necesarias para imágenes almacenadas en tu carpeta public/
, ya que Astro no puede analizar estos archivos.
densities
Sección titulada densities
Agregado en:
astro@3.3.0
Una lista de densidades de píxeles para generar la imagen.
Si se proporciona, este valor se utilizará para generar un atributo srcset
en la etiqueta <img>
. No proporciones un valor para widths
cuando utilices este valor.
Las densidades que sean iguales a los anchos mayores que la imagen original se ignorarán para evitar el escalado de la imagen.
widths
Sección titulada widths
Agregado en:
astro@3.3.0
Una lista de anchos para generar la imagen.
Si se proporciona, este valor se utilizará para generar un atributo srcset
en la etiqueta <img>
. También se debe proporcionar una propiedad sizes
.
No proporciones un valor para densities
cuando utilices este valor. Solo uno de estos dos valores se puede utilizar para generar un srcset
.
Los anchos que sean mayores que la imagen original se ignorarán para evitar el escalado de la imagen.
format
Sección titulada formatPuedes opcionalmente indicar el tipo de archivo de imagen de salida que se va a utilizar.
Por defecto, el componente <Image />
producirá un archivo .webp
.
quality
Sección titulada qualityquality
es una propiedad opcional que puede ser:
- un preajuste (
low
,mid
,high
,max
) que se normaliza automáticamente entre los formatos. - un número del
0
al100
(interpretado de manera diferente entre los formatos).
inferSize
Sección titulada inferSize
Agregado en:
astro@4.4.0
Te permite establecer automaticamente el width
y height
original de una imagen remota.
Por defecto, este valor está establecido en false
y debes especificar manualmente ambas dimensiones para tus imágenes remotas.
Agrega inferSize
al componente <Image />
(o inferSize: true
a getImage()
) para inferir estos valores del contenido de la imágen cuando se obtiene. Esto es útil si no conoces las dimensiones de la imagen remota, o si éstas pueden cambiar:
inferSize
puede obtener las dimensiones de una imagen remota de un dominio que no ha sido autorizado, sin embargo la imagen en sí permanecerá sin procesar.
Propiedades adicionales
Sección titulada Propiedades adicionalesAdemás de las propiedades mencionadas anteriormente, el componente <Image />
acepta todas las propiedades aceptadas por la etiqueta HTML <img>
.
Por ejemplo, puedes proporcionar una propiedad class
al elemento <img>
final.
Estableciendo valores por defecto
Sección titulada Estableciendo valores por defectoActualmente, no hay forma de especificar valores predeterminados para todos los componentes <Image />
. Los atributos requeridos deben establecerse en cada componente individual.
Como alternativa, puedes envolver estos componentes en otro componente de Astro para reutilizarlos. Por ejemplo, podrías crear un componente para las imágenes de tus entradas de blog:
<Picture />
Sección titulada <Picture />
Agregado en:
astro@3.3.0
Usa el componente <Picture />
incorporado de Astro para mostrar una imagen receptiva con varios formatos y/o tamaños.
Propiedades
Sección titulada Propiedades<Picture />
acepta todas las propiedades del componente <Image />
, más las siguientes:
formats
Sección titulada formatsUn arreglo de formatos de imagen para usar en las etiquetas <source>
. Las entradas se agregarán como elementos <source>
en el orden en que se enumeran, y este orden determina qué formato se muestra. Para obtener el mejor rendimiento, enumera el formato más moderno primero (por ejemplo, webp
o avif
). Por defecto, esto se establece en ['webp']
.
fallbackFormat
Sección titulada fallbackFormatFormato que se utilizará como valor de respaldo para la etiqueta <img>
.
El valor predeterminado es .png
para imágenes estáticas, .gif
para imágenes animadas y .svg
para archivos SVG.
pictureAttributes
Sección titulada pictureAttributesUn objeto de atributos que se agregarán a la etiqueta <picture>
.
Usa esta propiedad para aplicar atributos al elemento <picture>
externo. Los atributos aplicados al componente <Picture />
directamente se aplicarán al elemento <img>
interno, excepto aquellos utilizados para la transformación de imágenes.
La sintaxis de Astro también admite escribir directamente una etiqueta <img>
, con control total sobre su salida final. Estas imágenes no se procesarán ni optimizarán.
Esta acepta todas las propiedades de la etiqueta HTML <img>
, y la única propiedad requerida es src
.
Imágenes locales en src/
Sección titulada Imágenes locales en src/Las imágenes locales deben ser importadas desde la ruta relativa al archivo .astro
existente, o configurar y usar un alias de importación. Luego, puedes acceder a la propiedad src
de la imagen y otras propiedades para usar en la etiqueta <img>
.
Por ejemplo, utiliza las propiedades height
y width
propias de la imagen para evitar CLS y mejorar los Core Web Vitals.
Los activos de imagen importados coinciden con la siguiente firma:
Imágenes en public/
Sección titulada Imágenes en public/Para las imágenes ubicadas dentro de public/
, utiliza la ruta de archivo relativa a la carpeta public de la imagen como valor de src
:
Imágenes remotas
Sección titulada Imágenes remotasPara las imágenes remotas, utiliza la URL completa de la imagen como valor de src
:
Eligiendo <Image />
vs <img>
Sección titulada Eligiendo <Image /> vs <img>El componente <Image />
optimiza tu imagen e infiere el ancho y el alto (en imágenes locales) en función de la relación de aspecto original para evitar CLS. Sin embargo, solo funciona con ciertos formatos y no proporciona un elemento <picture>
, ni admite srcset
.
Utiliza el elemento HTML <img>
cuando no puedas usar el componente <Image />
, por ejemplo:
- para formatos de imagen no admitidos
- cuando no deseas que tu imagen se optimice mediante Astro
- para acceder y cambiar el atributo
src
dinámicamente en el lado del cliente
Autorizando imágenes remotas
Sección titulada Autorizando imágenes remotasPuedes configurar listas de dominios y patrones de URL de origen de imágenes autorizados para la optimización de imágenes utilizando image.domains
y image.remotePatterns
. Esta configuración es una capa adicional de seguridad para proteger tu sitio al mostrar imágenes desde una fuente externa.
Remote images from other sources will not be optimized, but using the <Image />
component for these images will prevent Cumulative Layout Shift (CLS).
For example, the following configuration will only allow remote images from astro.build
to be optimized:
La siguiente configuración solo permitirá que las imágenes remotas provengan de hosts HTTPS:
Utilizando imágenes de un CMS o CDN
Sección titulada Utilizando imágenes de un CMS o CDNLos CDNs de imágenes funcionan con todas las opciones de imágenes de Astro. Utiliza la URL completa de la imagen como atributo src
en el componente <Image />
, una etiqueta <img>
o en la notación Markdown. Para la optimización de imágenes con imágenes remotas, también configura tus dominios autorizados o patrones de URL.
Alternativamente, si el CDN proporciona un SDK de Node.js, puedes utilizarlo en tu proyecto. Por ejemplo, el SDK de Cloudinary puede generar una etiqueta <img>
con el src
adecuado por ti.
Imágenes en archivos Markdown
Sección titulada Imágenes en archivos MarkdownUtiliza la sintaxis estándar de Markdown ![alt](src)
en tus archivos .md
. Esta sintaxis funciona con la API de servicio de imagenes de Astro para optimizar tus imágenes locales y las imágenes remotas autorizadas.
La etiqueta <img>
no es compatible para imágenes locales y el componente <Image />
no está disponible en archivos .md
.
Si necesitas más control sobre los atributos de tus imágenes, te recomendamos utilizar el formato de archivo .mdx
, que te permite incluir el componente <Image />
de Astro o una etiqueta JSX <img />
además de la sintaxis Markdown. Utiliza la integración MDX para agregar soporte para MDX en Astro.
Imágenes en archivos MDX
Sección titulada Imágenes en archivos MDXPuedes utilizar el componente <Image />
de Astro y las etiquetas JSX <img />
en tus archivos .mdx
importando tanto el componente como tu imagen. Úsalos tal como se utilizan en archivos .astro
.
Además, hay soporte para la sintaxis estándar de Markdown ![alt](src)
sin necesidad de importación.
Imágenes en colecciones de contenido
Sección titulada Imágenes en colecciones de contenidoLas imágenes en colecciones de contenido se procesarán de la misma manera que lo hacen en Markdown y MDX dependiendo del tipo de archivo que estés utilizando.
Además, puedes declarar una imagen asociada para una entrada de colecciones de contenido, así como la imagen de portada de una publicación de un blog, en el encabezado utilizando su ruta relativa a la carpeta actual:
El helper image
para el esquema de colecciones de contenido te permite validar los metadatos de la imagen utilizando Zod.
La imagen se importará y transformará en metadatos, lo que te permitirá pasarlo como src
a <Image/>
, <img>
o getImage()
.
El siguiente ejemplo muestra una página de índice de un blog que muestra la foto de portada y el título de cada entrada del blog a partir del esquema anterior:
Imágenes en componentes de frameworks UI
Sección titulada Imágenes en componentes de frameworks UICuando añadas imágenes en un componente de un framework UI, utiliza la sintaxis de imagen propia del framework para renderizar una imagen (p. ej. <img/>
en JSX, <img>
en Svelte).
Las imágenes locales deben ser importadas primero para acceder a sus propiedades de imagen como src
.
Pasando el componente Image
Sección titulada Pasando el componente ImageEl componente <Image />
, al igual que cualquier otro componente de Astro, no está disponible para los componentes de frameworks UI.
Sin embargo, puedes pasar el contenido estático generado por <Image />
a un componente de framework dentro de un archivo .astro
como hijos o utilizando un <slot/>
nombrado:
Generando imágenes con getImage()
Sección titulada Generando imágenes con getImage()getImage()
se basa en APIs solo para el servidor y provoca errores en la compilación cuando se utiliza en el lado del cliente.
La función getImage()
está destinada a generar imágenes que se utilizarán en otro lugar que no sea directamente en HTML, por ejemplo, en una Ruta API. También te permite crear tu propio componente <Image />
personalizado.
getImage()
recibe un objeto de opciones con las mismas propiedades que el componente Image (excepto alt
).
Devuelve un objeto con las siguientes propiedades:
Texto Alt
Sección titulada Texto AltNo todos los usuarios pueden ver las imágenes de la misma manera, por lo que la accesibilidad es una preocupación especialmente importante al utilizar imágenes. Utiliza el atributo alt
para proporcionar texto alternativo descriptivo para las imágenes.
Este atributo es requerido tanto para los componentes <Image />
como <Picture />
. Si no se proporciona texto alternativo, se mostrará un mensaje de error útil recordándote incluir el atributo alt
.
Si la imagen es meramente decorativa (es decir, no contribuye a la comprensión de la página), establece alt=""
para que los lectores de pantalla sepan que deben ignorar la imagen.
Servicio de imágenes por defecto
Sección titulada Servicio de imágenes por defectoSharp es el servicio de imágenes por defecto utilizado para astro:assets
. Puedes configurar aún más el servicio de imágenes utilizando la opción image.service
.
Cuando se utiliza un administrador de paquetes estricto como pnpm
, es posible que debas instalar manualmente Sharp en tu proyecto, aunque sea una dependencia de Astro:
Configura Squoosh
Sección titulada Configura SquooshSi prefieres utilizar Squoosh para transformar tus imágenes, actualiza tu configuración con lo siguiente:
Configura el servicio no-op de paso
Sección titulada Configura el servicio no-op de pasoSi tu adaptador para el modo server
o hybrid
no admite la optimización de imágenes integrada de Astro con Squoosh y Sharp (por ejemplo, Deno, Cloudflare), puedes configurar un servicio de imágenes sin acción para permitirte utilizar los componentes <Image />
y <Picture />
. Ten en cuenta que Astro no realiza ninguna transformación ni procesamiento de imágenes en estos entornos. Sin embargo, aún puedes disfrutar de otros beneficios de usar astro:assets
, como la ausencia de Desplazamiento Acumulativo de Diseño (CLS), el atributo alt
obligatorio y una experiencia de autoría coherente.
Configura el servicio passthroughImageService()
para evitar el procesamiento de imágenes de Squoosh y Sharp:
Integraciones comunitarias
Sección titulada Integraciones comunitariasExisten varias integraciones de imágenes de la comunidad de terceros para optimizar y trabajar con imágenes en tu proyecto de Astro.
Actualizar a v3.0 desde v2.x
Sección titulada Actualizar a v3.0 desde v2.xastro:assets
ya no está detrás de una bandera experimental en Astro v3.0.
<Image />
es ahora un componente integrado y se ha eliminado la integración anterior @astrojs/image
.
Estos y otros cambios relacionados con el uso de imágenes en Astro pueden causar algunos cambios disruptivos al actualizar tu proyecto de Astro de una versión anterior.
Sigue las instrucciones a continuación según corresponda para actualizar un proyecto de Astro v2.x a v3.0.
Actualizar desde experimental.assets
Sección titulada Actualizar desde experimental.assetsSi habías habilitado previamente la bandera experimental para astro:assets
, deberás actualizar tu proyecto para Astro v3.0, que ahora incluye las características de assets de forma predeterminada.
Eliminar la bandera experimental.assets
Sección titulada Eliminar la bandera experimental.assetsElimina la bandera experimental:
Si es necesario, también actualiza tu archivo src/env.d.ts
para reemplazar la referencia astro/client-image
por astro/client
:
Eliminar el alias de importación ~/assets
Sección titulada Eliminar el alias de importación ~/assetsEste alias de importación ya no se incluye por defecto con astro:assets
. Si estabas usando este alias con assets experimentales, debes convertirlos a rutas de archivo relativas o crear tus propios alias de importación.
Agrega soporte sencillo para assets en Cloudflare, Deno, Vercel Edge y Netlify Edge
Sección titulada Agrega soporte sencillo para assets en Cloudflare, Deno, Vercel Edge y Netlify EdgeAstro v3.0 permite que astro:assets
funcione sin errores en Cloudflare, Deno, Vercel Edge y Netlify Edge, que no admiten la optimización de imágenes integrada de Astro con Squoosh y Sharp. Ten en cuenta que Astro no realiza ninguna transformación ni procesamiento de imágenes en estos entornos. Sin embargo, aún puedes disfrutar de otros beneficios de usar astro:assets
, como la ausencia de Desplazamiento Acumulativo de Diseño (CLS), el atributo alt
obligatorio y una experiencia de autoría coherente.
Si antes evitaste usar astro:assets
debido a estas limitaciones, ahora puedes usarlo sin problemas. Puedes configurar el servicio de imágenes sin acción para optar explícitamente por este comportamiento:
Decide dónde almacenar tus imágenes
Sección titulada Decide dónde almacenar tus imágenesConsulta la guía de Imágenes para ayudarte a decidir dónde almacenar tus imágenes. Es posible que desees aprovechar las nuevas opciones para almacenar tus imágenes con la flexibilidad adicional que astro:assets
ofrece. Por ejemplo, las imágenes relativas desde la carpeta src/
de tu proyecto ahora pueden ser referenciadas en Markdown, MDX y Markdoc utilizando la sintaxis estándar de Markdown ![alt](src)
.
Actualiza las etiquetas existentes <img>
Sección titulada Actualiza las etiquetas existentes <img>Anteriormente, importar una imagen devolvía un string
con la ruta de la imagen. Los assets de imagen importados coinciden con la siguiente firma:
Debes actualizar el atributo src
de cualquier etiqueta <img>
existente (incluyendo cualquier imagen en componentes de frameworks UI) y también puedes actualizar otros atributos que ahora están disponibles para ti a partir de la imagen importada.
Actualiza tus archivos Markdown, MDX y Markdoc
Sección titulada Actualiza tus archivos Markdown, MDX y MarkdocLas imágenes relativas desde la carpeta src/
de tu proyecto ahora pueden ser referenciadas en Markdown, MDX y Markdoc utilizando la sintaxis estándar de Markdown ![alt](src)
.
Esto te permite mover tus imágenes desde el directorio public/
a la carpeta src/
de tu proyecto, donde ahora serán procesadas y optimizadas. Tus imágenes existentes en public/
y las imágenes remotas siguen siendo válidas, pero no son optimizadas por el proceso de compilación de Astro.
Si necesitas más control sobre los atributos de tu imagen, te recomendamos usar el formato de archivo .mdx
, que te permite incluir el componente <Image />
de Astro o una etiqueta JSX <img />
además de la sintaxis Markdown. Utiliza la integración de MDX para agregar soporte para MDX a Astro.
Elimina @astrojs/image
Sección titulada Elimina @astrojs/imageSi estabas utilizando la integración de imágenes en Astro v2.x, completa los siguientes pasos:
-
Elimina la integración
@astrojs/image
.Debes eliminar la integración desinstalándola y luego eliminándola de tu archivo
astro.config.mjs
. -
Actualiza los tipos (si es necesario).
Si tenías tipos especiales configurados para
@astrojs/image
ensrc/env.d.ts
, es posible que necesites cambiarlos de nuevo a los tipos predeterminados de Astro si la actualización a la versión 3 no completó este paso por ti.Del mismo modo, actualiza
tsconfig.json
si es necesario: -
Migra cualquier componente
<Imagen />
existente.Cambia todas las declaraciones de
import
de@astrojs/image/components
aastro:assets
para poder usar el nuevo componente integrado<Image />
.Elimina cualquier atributo del componente que no sean propiedades de assets de imagen actualmente admitidas.
Por ejemplo,
aspectRatio
ya no es compatible, ya que ahora se infiere automáticamente a partir de los atributoswidth
yheight
. -
Elimina cualquier componente
<Picture />
existente.Actualmente, la función de assets integrada no incluye un componente
<Picture />
.En su lugar, puedes utilizar los atributos de imagen HTML
srcset
ysizes
, o la etiqueta<picture>
para dirección de arte o para crear imágenes responsivas. -
Elige un servicio de imágenes predeterminado.
Sharp es ahora el servicio de imágenes predeterminado utilizado para
astro:assets
. Si deseas utilizar Sharp, no se requiere ninguna configuración.Si prefieres utilizar Squoosh para transformar tus imágenes, actualiza tu configuración con la siguiente opción
image.service
:
Actualiza los esquemas de Colecciones de Contenido
Sección titulada Actualiza los esquemas de Colecciones de ContenidoAhora puedes declarar una imagen asociada para una entrada de colecciones de contenido, como la imagen de portada de una entrada de blog, en tu metadatos usando su ruta relativa a la carpeta actual.
El nuevo helper image
para colecciones de contenido te permite validar los metadatos de la imagen utilizando Zod. Aprende más sobre cómo usar imágenes en colecciones de contenido
Navegando por las importaciones de imágenes en Astro v3.0
Sección titulada Navegando por las importaciones de imágenes en Astro v3.0En Astro v3.0, si tienes que conservar el antiguo comportamiento de importación para las imágenes y requieres una representación de tipo string de la URL de la imagen, añade ?url
al final de la ruta de la imagen al importarla. Por ejemplo:
Este enfoque garantiza que obtengas el string URL. Ten en cuenta que durante el desarrollo, Astro utiliza una ruta src/
, pero al compilar, genera rutas hash como /_astro/cat.a6737dd3.png
.
Si prefieres trabajar directamente con el objeto de imagen, puedes acceder a la propiedad .src
. Este enfoque es el mejor para tareas como la gestión de las dimensiones de la imagen para las métricas de Core Web Vitals y la prevención de CLS.
Si estás en transición al nuevo comportamiento de importación, combinar ?url
y .src
puede ser el método adecuado para el manejo de imágenes sin problemas.