Images
本頁內容尚未翻譯。
Astro provides several ways for you to use images on your site, whether they are stored locally inside your project, linked to from an external URL, or managed in a CMS or CDN!
<Image />
and <Picture />
components.
Where to store images
Section titled Where to store imagessrc/
vs public/
Section titled src/ vs public/We recommend that local images are kept in src/
when possible so that Astro can transform, optimize and bundle them. Files in the /public
directory are always served or copied into the build folder as-is, with no processing.
Your local images stored in src/
can be used by all files in your project: .astro
, .md
, .mdx
, .mdoc
, and other UI frameworks. Images can be stored in any folder, including alongside your content.
Store your images in the public/
folder if you want to avoid any processing or to have a direct public link to them.
Remote images
Section titled Remote imagesYou can also choose to store your images remotely, in a content management system (CMS) or digital asset management (DAM) platform. Astro can fetch your data remotely using APIs or display images from their full URL path.
For extra protection when dealing with external sources, Astro’s image components and helper function will only process (e.g. optimize, transform) images from authorized image sources specified in your configuration. Remote images from other sources will be displayed with no processing.
Images in .astro
files
Section titled Images in .astro filesIn .astro
files, a local image must be imported from its relative path. This import provides the src
value for your image.
Remote and public/
images do not require importing, and instead require a URL (full, or relative path on your site) for src
.
Import and use Astro’s native <Image />
and <Picture />
components for optimized images. Astro syntax also supports writing an HTML <img>
tag directly, which skips image processing.
<Image />
and <Picture />
components.
Display optimized images with the <Image />
component
Section titled Display optimized images with the <Image /> componentUse the built-in <Image />
Astro component to display optimized versions of:
- your local images located within the
src/
folder - configured remote images from authorized sources
<Image />
can transform a local or authorized remote image’s dimensions, file type, and quality for control over your displayed image. The resulting <img>
tag includes alt
, loading
, and decoding
attributes and infers image dimensions to avoid Cumulative Layout Shift (CLS).
Cumulative Layout Shift (CLS) is a Core Web Vital metric for measuring how much content shifted on your page during loading. The <Image />
component optimizes for CLS by automatically setting the correct width
and height
for your images.
The <Image />
component accepts several component properties as well as any attributes accepted by the HTML <img>
tag.
The following example provides a class
to the image component which will apply to the final <img>
element.
You can also use the <Image />
component for images in the public/
folder, or remote images not specifically configured in your project, even though these images will not be optimized or processed. The resulting image will be the same as using the HTML <img>
.
However, using the image component for all images provides a consistent authoring experience and prevents Cumulative Layout Shift (CLS) even for your unoptimized images.
Create responsive images with the <Picture />
component
Section titled Create responsive images with the <Picture /> component
Added in:
astro@3.3.0
Use the built-in <Picture />
Astro component to display a responsive image with multiple formats and/or sizes.
<Picture />
component properties in the astro:assets
reference.
Display unprocessed images with the HTML <img>
tag
Section titled Display unprocessed images with the HTML <img> tagThe Astro template syntax also supports writing an <img>
tag directly, with full control over its final output. These images will not be processed and optimized. It accepts all HTML <img>
tag properties, and the only required property is src
.
Local images must be imported from the relative path from the existing .astro
file, or you can configure and use an import alias. Then, you can access the image’s src
and other properties to use in the <img>
tag.
Imported image assets match the following signature:
The following example uses the image’s own height
and width
properties to avoid Cumulative Layout Shift (CLS) and improve Core Web Vitals:
Images in public/
Section titled Images in public/For images located within public/
use the image’s file path relative to the public folder as the src
value:
Remote images
Section titled Remote imagesFor remote images, use the image’s full URL as the src
value:
Choosing <Image />
vs <img>
Section titled Choosing <Image /> vs <img>The <Image />
component optimizes your image and infers width and height (for images it can process) based on the original aspect ratio to avoid CLS. It is the preferred way to use images in .astro
files whenever possible.
Use the HTML <img>
element when you cannot use the <Image />
component, for example:
- for unsupported image formats
- when you do not want your image optimized by Astro
- to access and change the
src
attribute dynamically client-side
Setting Default Values
Section titled Setting Default ValuesCurrently, there is no way to specify default values for all <Image />
or <Picture/>
components. Required attributes should be set on each individual component.
As an alternative, you can wrap these components in another Astro component for reuse. For example, you could create a component for your blog post images that receives attributes as props and applies consistent styles to each image:
Authorizing remote images
Section titled Authorizing remote imagesYou can configure lists of authorized image source URL domains and patterns for image optimization using image.domains
and image.remotePatterns
. This configuration is an extra layer of safety to protect your site when showing images from an external source.
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:
The following configuration will only allow remote images from HTTPS hosts:
Using Images from a CMS or CDN
Section titled Using Images from a CMS or CDNImage CDNs work with all Astro image options. Use an image’s full URL as the src
attribute in the <Image />
component, an <img>
tag, or in Markdown notation. For image optimization with remote images, also configure your authorized domains or URL patterns.
Alternatively, the CDN may provide its own SDKs to more easily integrate in an Astro project. For example, Cloudinary supports an Astro SDK which allows you to easily drop in images with their CldImage
component or a Node.js SDK that can generate URLs to use with an <img>
tag in a Node.js environment.
<Image />
and <Picture />
components.
Images in Markdown files
Section titled Images in Markdown filesUse standard Markdown ![alt](src)
syntax in your .md
files. This syntax works with Astro’s Image Service API to optimize your local images stored in src/
. Remote images and images stored in the public/
folder are not optimized.
The <img>
tag is not supported for local images, and the <Image />
and <Picture />
components are unavailable in .md
files.
If you require more control over your image attributes, we recommend using Astro’s MDX integration to add support for.mdx
file format. MDX allows adding components to Markdown and there are additional image options available in MDX.
Images in MDX files
Section titled Images in MDX filesYou can use Astro’s <Image />
and <Picture />
components in your .mdx
files by importing both the component and your image. Use them just as they are used in .astro
files. The JSX <img />
tag is also supported for unprocessed images and uses the same image import as the HTML <img>
tag.
Additionally, there is support for standard Markdown ![alt](src)
syntax with no import required.
<Image />
and <Picture />
components.
Images in content collections
Section titled Images in content collectionsImages in content collections will be processed the same way they are in Markdown and MDX depending on which file type you are using.
Additionally, you can declare an associated image for a content collections entry, such as a blog post’s cover image, in your frontmatter using its path relative to the current folder:
The image
helper for the content collections schema lets you validate and import the image.
The image will be imported and transformed into metadata, allowing you to pass it as a src
to <Image/>
, <img>
, or getImage()
.
The example below shows a blog index page that renders the cover photo and title of each blog post from the schema above:
Images in UI framework components
Section titled Images in UI framework componentsThe <Image />
component, like any other Astro component, is unavailable inside UI framework components.
But, you can pass the static content generated by <Image />
to a framework component inside a .astro
file as children or using a named <slot/>
:
You can also use the framework’s own image syntax to render an image (e.g. <img />
in JSX, <img>
in Svelte).
Local images must first be imported to access their image properties such as src
.
Generating images with getImage()
Section titled Generating images with getImage()The getImage()
function is intended for generating images destined to be used somewhere else than directly in HTML, for example in an API Route. When you need options that the <Picture>
and <Image>
components do not currently support, you can use the getImage()
function to create your own custom <Image />
component.
getImage()
reference.
Alt Text
Section titled Alt TextNot all users can see images in the same way, so accessibility is an especially important concern when using images. Use the alt
attribute to provide descriptive alt text for images.
This attribute is required for both the <Image />
and <Picture />
components. If no alt text is provided, a helpful error message will be provided reminding you to include the alt
attribute.
If the image is merely decorative (i.e. doesn’t contribute to the understanding of the page), set alt=""
so that screen readers know to ignore the image.
Default image service
Section titled Default image serviceSharp is the default image service used for astro:assets
. You can further configure the image service using the image.service
option.
When using a strict package manager like pnpm
, you may need to manually install Sharp into your project even though it is an Astro dependency:
Configure no-op passthrough service
Section titled Configure no-op passthrough serviceIf your adapter does not support Astro’s built-in Sharp image optimization (e.g. Deno, Cloudflare), you can configure a no-op image service to allow you to use the <Image />
and <Picture />
components. Note that Astro does not perform any image transformation and processing in these environments. However, you can still enjoy the other benefits of using astro:assets
, including no Cumulative Layout Shift (CLS), the enforced alt
attribute, and a consistent authoring experience.
Configure the passthroughImageService()
to avoid Sharp image processing:
Asset Caching
Section titled Asset CachingAstro stores processed image assets in a cache directory during site builds for both local and remote images from authorized sources. By preserving the cache directory between builds, processed assets are reused, improving build time and bandwidth usage.
The default cache directory is ./node_modules/.astro
, however this can be changed using the cacheDir
configuration setting.
Remote Images
Section titled Remote ImagesRemote images in the asset cache are managed based on HTTP Caching, and respect the Cache-Control header returned by the remote server. Images are cached if the Cache-Control header allows, and will be used until they are no longer fresh.
Revalidation
Section titled Revalidation
Added in:
astro@5.1.0
New
Revalidation reduces bandwidth usage and build time by checking with the remote server whether an expired cached image is still up-to-date. If the server indicates that the image is still fresh, the cached version is reused, otherwise the image is redownloaded.
Revalidation requires that the remote server send Last-Modified and/or Etag (entity tag) headers with its responses. This feature is available for remote servers that support the If-Modified-Since and If-None-Match headers.
Community Integrations
Section titled Community IntegrationsThere are several third-party community image integrations for optimizing and working with images in your Astro project.
Learn