Imagens
Astro fornece diversas formas de utilizar imagens no seu site, sejam elas armazenadas localmente dentro do seu projeto, vinculadas de uma URL externa, ou gerenciadas em um CMS ou CDN!
Onde armazenar imagens
Seção intitulada Onde armazenar imagenssrc/
vs public/
Seção intitulada src/ vs public/Nós recomendamos que imagens locais sejam mantidas em src/
quando possível para que o Astro possa transformar, otimizar e fazer bundle delas. Arquivos no diretório /public
sempre são servidos ou copiados para a pasta da build como estão, com nenhum processamento.
Suas imagens locais armazenadas em src/
podem ser usadas por todos os arquivos em seu projeto: .astro
, .md
, .mdx
, .mdoc
, e outros frameworks de UI. Imagens podem ser armazenadas em qualquer pasta, incluindo ao lado do seu conteúdo.
Armazene suas imagens na pasta public/
se você quer evitar qualquer processamento ou para ter um link público direto para elas.
Imagens remotas
Seção intitulada Imagens remotasVocê pode também escolher armazenar suas imagens remotamente, em um sistema de gerenciamento de conteúdo (CMS, do inglês “content management system”) ou plataforma de gerenciamento de assets digitais (DAM, do inglês “digital asset management”).
Para proteção extra enquanto lida com fontes externas, imagens remotas serão apenas processadas de fontes de imagem autorizadas especificadas na sua configuração. Contudo, quaisquer imagens remotas podem ser mostradas.
Astro pode buscar dados remotamente usando APIs ou mostrar imagens a partir de seus caminhos de URL completos. Veja nossos guias de CMS para exemplos em como integrar serviços comuns.
Imagens em arquivos .astro
Seção intitulada Imagens em arquivos .astroEm arquivos .astro
, imagens locais devem ser importadas no arquivo para que sejam utilizadas. Imagens remotas e de public/
não precisam ser importadas.
Importe e utilize o componente <Image />
integrado do Astro para imagens otimizadas utilizando astro:assets
. Alternativamente, a sintaxe do Astro suporta escrever uma tag <img>
do HTML diretamente, o que pula o processamento de imagem.
Para importar imagens dinamicamente do diretório src/
, veja a seguinte receita:
<Image />
(astro:assets
)
Seção intitulada <Image /> (astro:assets)Utilize o componente <Image />
integrado do Astro para mostrar versões otimizadas de suas imagens locais e imagens remotas configuradas.
Imagens na pasta public/
, assim como imagens remotas não especificadamente configuradas no seu projeto, também podem ser usadas com o componente Image, mas não serão processadas.
<Image />
pode transformar as dimensões, tipo de arquivo, e controle da qualidade da sua imagem mostrada local ou autorizada remota. A tag <img>
resultante inclui os atributos alt
, loading
e decoding
e infere as dimensões da imagem para evitar Cumulative Layout Shift (CLS).
Cumulative Layout Shift (CLS) ou Mudança Cumulativa de Layout, é uma métrica do Core Web Vitals para mensurar o quanto o conteúdo da sua página se moveu durante o carregamento. O componente <Image />
otimizada para CLS ao automaticamente definir o width
e height
corretos para suas imagens locais.
Propriedades
Seção intitulada Propriedadessrc (obrigatório)
Seção intitulada src (obrigatório)O formato do valor src
de sua imagem depende de onde o seu arquivo de imagem está localizado:
-
Imagens locais em
src/
- você deve também importar a imagem utilizando um caminho de arquivo relativo ou configurar e utilizar um atalho de importação. Então, utilize o nome de importação como o valor desrc
: -
Imagens na pasta
public/
- utilize o caminho de arquivo da imagem relativo a pasta public: -
Imagens remotas - utilize a URL completa da imagem como o valor da propriedade:
alt (obrigatório)
Seção intitulada alt (obrigatório)Utilize o atributo alt
obrigatório para fornecer uma string de texto alternativo descritivo para imagens.
Se uma imagem é meramente decorativa (ou seja, não contribui para o entendimento da página), defina alt=""
para que leitores de tela e outras tecnologias assistivas saibam ignorar a imagem.
width e height (obrigatório para imagens remotas e de public/
)
Seção intitulada width e height (obrigatório para imagens remotas e de public/)Essas propriedades definem as dimensões a se utilizar para a imagem.
Ao utilizar imagens em sua proporção de tela original, o width
e height
são opcionais. Essas dimensões podem ser inferidos automaticamente a partir de arquivos de imagem localizados em src/
e a partir de imagens remotas com inferSize
definido como true
.
Porém, ambas essas propriedades são obrigatórias para imagens armazenadas em sua pasta public/
já que o Astro é incapaz de analisar esses arquivos.
densities
Seção intitulada densities
Adicionado em:
astro@3.3.0
Uma lista de densidades de pixels para gerar a imagem
Se atribuído, o valor é usado para gerar o atributo srcset
na tag <img>
. Você não deve prover um valor para widths
quando tiver usando esse atributo.
As densidades que são iguais a larguras maiores do que a imagem original serão ignoradas para evitar o aumento da escala da imagem.
widths
Seção intitulada widths
Adicionado em:
astro@3.3.0
Uma lista de larguras a serem geradas para a imagem.
Se fornecido, esse valor será usado para gerar um atributo srcset
na tag <img>
Uma propriedade sizes também deve ser fornecida.
Não forneça um valor para densities
ao usar este valor. Apenas um destes dois valores pode ser usado para gerar um srcset.
Larguras que forem maiores do que a imagem original serão ignoradas para evitar o redimensionamento da imagem.
format
Seção intitulada formatVocê pode opcionalmente definir um tipo de arquivo de imagem final para ser utilizado.
Por padrão, o componente <Image />
irá produzir um arquivo .webp
.
quality
Seção intitulada qualityquality
é uma propriedade que pode tanto ser:
- uma predefinição (
low
,mid
,high
,max
) que é automaticamente normalizada entre formatos. - um número de
0
a100
(interpretado diferentemente entre formatos).
inferSize
Seção intitulada inferSize
Adicionado em:
astro@4.4.0
Te permite definir os valores oridinais de width
e height
para imagens remotas automaticamente.
Por padrão, essa propriedade é definida como false
e você deve especificar ambas as dimensões para sua imagem remota.
Adicione inferSize
ao componente <Image />
(ou inferSize: true
em getImage()
) para inferrir esses valores da imagem remota quando baixada. Isso é útil quando você não sabe as dimensões da imagem remota, ou quando elas podem mudar.
inferSize
pode baixar informações de uma imagem remota de um domínio que não foi autorizado, no entanto, a imagem em si não sera processada.
Propriedades adicionais
Seção intitulada Propriedades adicionaisEm adição as propriedades acima, o componente <Image />
aceita todas as propriedades aceitas pela tag <img>
do HTML.
Por exemplo, você pode fornecer uma class
para o elemento <img>
final.
Definindo Valores Padrões
Seção intitulada Definindo Valores PadrõesAtualmente, não há uma forma de especificar valores padrões para todos os componentes <Image />
. Atributos obrigatórios devem ser definidos em cada componente individual.
Como uma alternativa, você pode envolver esses componentes em outro componente Astro para reutilização. Por exemplo, você poderia criar um componente para suas imagens de postagens do blog:
<Picture />
Seção intitulada <Picture />
Adicionado em:
astro@3.3.0
Utilize o componente <Picture />
integrado do Astro para exibir uma imagem responsiva com vários formatos e/ou tamanhos.
Propriedades
Seção intitulada Propriedades<Picture />
aceita todas as propriedades do componente <Image />
, juntamente com:
formats
Seção intitulada formatsUm array de formatos de imagem a serem usados para as tags <source>
. As entradas serão adicionadas como elementos <source>
na ordem em que estão listadas, e essa ordem determina qual formato é exibido. Para obter o melhor desempenho, liste o formato mais moderno primeiro (por exemplo, webp
ou avif
). Por padrão, isso é configurado como ['webp']
.
fallbackFormat
Seção intitulada fallbackFormatFormato a ser usado como um valor de fallback para a tag <img>
.
Por padrão, é configurado como .png
para imagens estáticas (ou .jpg
se a imagem for um JPG), .gif
para imagens animadas e .svg
para arquivos SVG.
pictureAttributes
Seção intitulada pictureAttributesUm objeto de atributos a serem adicionados à tag <picture>
.
Use essa propriedade para aplicar atributos ao elemento externo <picture>
. Atributos aplicados diretamente ao componente <Picture />
serão aplicados internamente ao elemento <img>
, exceto aqueles usados para a transformação da imagem.
A sintaxe de templates do Astro também suporta escrever uma tag <img>
diretamente, com controle total sobre seu resultado final. Essas imagens não serão processadas e otimizadas.
Ela aceita todas as propriedades da tag <img>
do HTML, e a única propriedade obrigatória é src
.
Imagens locais em src/
Seção intitulada Imagens locais em src/Imagens locais devem ser importadas de seu caminho relativo a partir do arquivo .astro
existente, ou configure e utilize um atalho de importação. Então, você pode acessar o src
da imagem e outras propriedades para utilizar na tag <img>
.
Por exemplo, utilize as propriedades height
e width
da imagem para evitar CLS e melhorar os Core Web Vitals.
Assets de imagem importadas correspondem a seguinte assinatura:
Imagens em public/
Seção intitulada Imagens em public/Para imagens localizadas em public/
utilize o caminho do arquivo relativo a pasta public da imagem como o valor src
:
Imagens remotas
Seção intitulada Imagens remotasPara imagens remotas, utilize a URL completa da imagem como o valor de src
:
Escolhendo <Image />
vs <img>
Seção intitulada Escolhendo <Image /> vs <img>O componente <Image />
otimiza sua imagem e infere a largura e altura (de imagens locais) com base na proporção de tela original para evitar CLS.
Utilize o elemento <img>
do HTML quando você não pode utilizar o componente <Image />
, por exemplo:
- para formatos de imagem não suportados
- quando você não quer que sua imagem seja otimizada pelo Astro
- para acessar e modificar o atributo
src
dinamicamente no lado do cliente
Autorizando imagens remotas
Seção intitulada Autorizando imagens remotasVocê pode configurar listas de domínios e padrões de URL fonte de imagens autorizadas para otimização de imagem utilizando image.domains
e image.remotePatterns
. Essa configuração é uma camada adicional de segurança para proteger seu site ao mostrar imagens de uma fonte externa.
Imagens remotas de outras fontes não serão otimizadas, mas utilizando o componente <Image />
para essas imagens irá prevenir Cumulative Layout Shift (CLS).
Por exemplo, a seguinte configuração irá apenas permitir imagens remotas de astro.build
a serem otimizadas:
A seguinte configuração irá apenas permitir imagens remotas de hospedagens HTTPS:
Utilizando Imagens de CMS ou CDN
Seção intitulada Utilizando Imagens de CMS ou CDNCDNs de imagem funcionam com todas as opções de imagem do Astro. Utilize a URL completa de uma imagem como o atributo src
no componente <Image />
, em uma tag <img>
, ou na notação do Markdown. Para otimização de imagem com imagens remotas, também configure seus domínios e padrões de URL autorizados.
Alternativamente, se o CDN fornece um SDK para Node.js, você pode utilizá-lo em seu projeto. Por exemplo, o SDK da Cloudinary pode gerar uma tag <img>
com o src
apropriado para você.
Imagens em arquivos Markdown
Seção intitulada Imagens em arquivos MarkdownUtilize a sintaxe padrão do Markdown ![alt](src)
em seus arquivos .md
. Essa sintaxe funciona com a API de Serviço de Imagem do Astro para otimizar suas imagens locais e imagens remotas autorizadas.
A tag <img>
não é suportada para imagens locais, e o componente <Image />
está indisponível em arquivos .md
.
Se você precisa de mais controle sobre seus atributos da imagem, nós recomendamos utilizar o formato de arquivo .mdx
, que te permite incluir o componente <Image />
do Astro ou uma tag <img />
JSX em adição a sintaxe do Markdown. Utilize a integração MDX para adicionar suporte para MDX ao Astro.
Imagens em arquivos MDX
Seção intitulada Imagens em arquivos MDXVocê pode utilizar o componente <Image />
do Astro e tags <img />
JSX em seus arquivos .mdx
importando ambos o componente e sua imagem. Utilize-os assim como eles são utilizados em arquivos .astro
.
Adicionalmente, há suporte para sintaxe padrão do Markdown ![alt](src)
com nenhuma importação necessária.
Imagens em coleções de conteúdo
Seção intitulada Imagens em coleções de conteúdoImagens em coleções de conteúdo serão processadas da mesma forma que em arquivos Markdown e MDX dependendo do tipo do arquivo que estiver usando.
Adicionalmente, você pode declarar uma imagem associada para uma entrada de coleções de conteúdo, como a imagem de capa de uma postagem de blog, em seu frontmatter utilizando o caminho relativo a pasta atual:
O utilitário image
para esquemas de coleções de conteúdo te permite validar os metadados da imagem utilizando Zod.
A imagem será importada e transformada em metadados, te permitindo passá-la como o src
para <Image/>
, <img>
, ou getImage()
.
O exemplo abaixo mostra a página de índice de um blog que renderiza a foto de capa e o título de cada postagem do blog do esquema acima:
Imagens em componentes de frameworks de UI
Seção intitulada Imagens em componentes de frameworks de UIAo adicionar imagens em um componente de framework de UI, utilize a sintaxe de imagem própria do framework para renderizar uma imagem (e.x. <img />
em JSX, <img>
em Svelte).
Imagens locais devem primeiro ser importadas para acessar suas propriedades de imagem como src
.
Passando o componente Image
Seção intitulada Passando o componente ImageO componente <Image />
, assim como qualquer outro componente Astro, não está disponível para componentes de frameworks de UI.
Porém, você pode passar o conteúdo estático gerado por <Image />
para um componente de framework dentro de um arquivo .astro
como um filho ou utilizando um <slot/>
nomeado:
Gerando imagens com getImage()
Seção intitulada Gerando imagens com getImage()getImage()
depende em APIs únicas do servidor e quebra a build quando é utilizado no cliente.
A função getImage()
foi planejada para gerar imagens destinadas a serem em outro lugar do que diretamente no HTML, por exemplo em uma Rota de API. Ela te permite criar seu próprio componente <Image />
customizado.
getImage()
recebe um objeto de opções com as mesmas propriedades que o componente Image (exceto alt
).
Retorna um objeto com as seguintes propriedades:
Texto Alternativo
Seção intitulada Texto AlternativoNem todos os usuários podem ver imagens da mesma forma, então acessibilidade é uma preocupação especialmente importante ao utilizar imagens. Utilize o atributo alt
para fornecer texto alternativo descritivo para imagens.
Esse atributo é necessário para ambos os componentes <Image />
e <Picture />
. Se nenhum texto alternativo for fornecido, uma mensagem de erro será exibida te lembrando de incluir o atributo alt
.
Se a imagem for meramente decorativa (ou seja, não contribui para o entendimento da página), defina alt=""
para que leitores de tela saibam ignorar a imagem.
Serviço de imagem padrão
Seção intitulada Serviço de imagem padrãoSharp é o serviço de imagem padrão utilizado em astro:assets
. Você pode configurar o serviço de imagem utilizando a opção image.service
.
Ao usar um gerenciador de pacotes rigoroso como o pnpm
, talvez seja necessário instalar o Sharp manualmente o seu projeto, mesmo que seja uma dependência do Astro:
Configure o Squoosh
Seção intitulada Configure o SquooshSe você preferir utilizar Squoosh para transformar suas imagens, atualize sua configuração com o seguinte:
Configure o serviço de passagem não-operacional
Seção intitulada Configure o serviço de passagem não-operacionalSe o seu adaptador para modo server
ou hybrid
não suportar os serviços de otimização Squoosh e Shart integrados do Astro (e.g. Deno, Cloudflare), você pode configurar um serviço de imagem não-operacional para permitir que utilize os componentes <Image />
e <Picture />
. Note que o Astro não executa nenhuma transformação e processamento de imagens nesses ambientes. No entanto, você ainda pode os outros benefícios de utilizar o astro:assets
, incluindo não ter Cumulative Layout Shift (CLS), a exigência do atributo alt
, e a experiência de autoria consistente.
Configure o passthroughImageService
para evitar ambos os processamentos de imagem Squoosh e Sharp:
Integrações da Comunidade
Seção intitulada Integrações da ComunidadeHá diversas integrações de imagem da comunidade por terceiros para otimizar e trabalhar com imagens em seu projeto Astro.
Atualize para v3.0 da v2.x
Seção intitulada Atualize para v3.0 da v2.xastro:assets
não está mais atrás de uma flag experimental no Astro v3.0.
<Image />
agora é um componente integrado e a integração @astrojs/image
anterior foi removida.
Essa e outras mudanças em como utilizar imagens no Astro pode causar algumas mudanças radicais ao atualizar seu projeto Astro de uma versão anterior.
Por favor siga as instruções abaixo apropriadamente para atualizar um projeto Astro v2.x para v3.0.
Atualize de experimental.assets
Seção intitulada Atualize de experimental.assetsSe você anteriormente habilitou a flag experimental para astro:assets
, você vai precisar atualizar seu projeto para Astro v3.0 que agora inclui funcionalidades de assets por padrão.
Remova a flag experimental.assets
Seção intitulada Remova a flag experimental.assetsRemova a flag experimental:
Se necessário, também atualize seu arquivo src/env.d.ts
para substituir a referência astro/client-image
com astro/client
:
Remova o atalho de importação ~/assets
Seção intitulada Remova o atalho de importação ~/assetsEsse atalho de importação não é mais incluso por padrão com astro:assets
. Se você esteve utilizando esse atalho com assets experimentais, você deve convertê-los para camianhos de arquivo relativos, ou criar seu próprio atalho de importação.
Adicione suporte simples de assets para Cloudflare, Deno, Vercel Edge e Netlify Edge
Seção intitulada Adicione suporte simples de assets para Cloudflare, Deno, Vercel Edge e Netlify EdgeAstro v3.0 permite astro:assets
funcionar sem erros em Cloudflare, Deno, Vercel Edge e Netlify Edge, que não suporta a otimização integrada do Astro, Squoosh e Sharp. Note que Astro não realiza nenhuma transformação e processamento de imagem nesses ambientes. Porém, você ainda pode aproveitar os outros benefícios de se utilizar astro:assets
, incluindo nenhum Cumulative Layout Shift (CLS), a aplicação do atributo alt
, e a experiência de autoria consistente.
Se você anteriormente evitou utilizar astro:assets
por conta dessas limitações, agora você pode utilizá-lo sem problemas. Você pode configurar o serviço de imagem no-op para explicitamente optar por esse compartamento:
Decida onde armazenar suas imagens
Seção intitulada Decida onde armazenar suas imagensVeja o guia de Imagens para te ajudar a decidir onde armazenar suas imagens. Você pode desejar se aproveitar de novas opções para armazenar suas imagens com a flexibilidade adicional que astro:assets
traz. Por exemplo, imagens relativas a partir do src/
do seu projeto podem ser referenciadas em Markdown, MDX e Markdoc utilizando a sintaxe padrão do Markdown ![alt](src)
.
Atualize tags <img>
existentes
Seção intitulada Atualize tags <img> existentesAnteriormente, importar uma imagem iria retornar uma simples string
com o caminho da imagem. Agora, assets de imagem importadas correspodem a seguinte assinatura:
Você deve atualizar o atributo src
de quaisquer tags <img>
existentes (incluindo quaisquer imagens em componentes de framework de UI) e você também pode atualizar outros atributos que agora estão disponíveis para você da imagem importada.
Atualize seus arquivos Markdown, MDX e Markdoc
Seção intitulada Atualize seus arquivos Markdown, MDX e MarkdocImagens relativas da src/
do seu projeto agora podem ser referenciadas em Markdown, MDX e Markdoc utilizando a sintaxe padrão do Markdown ![alt](src)
.
Isso te permite mover suas imagens do diretório public/
para o src/
do seu projeto onde agora elas serão processadas e otimizadas. Suas imagens existentes em public/
e imagens remotas ainda são válidas mas não são otimizadas pelo processo de build do Astro.
Se você requer mais controle sobre seus atributos de imagem, nós recomendamos utilizar o formato de arquivo .mdx
, que te permite incluir o componente <Image />
do Astro ou uma tag <img />
JSX em adição a sintaxe do Markdown. Utilize a integração MDX para adicionar suporte de MDX para Astro.
Remova @astrojs/image
Seção intitulada Remova @astrojs/imageSe você estava utilizando a integração de imagem em Astro v2.x, complete as seguintes etapas:
-
Remova a integração
@astrojs/image
.Você deve remover a integração a desinstalando e então a removendo do seu arquivo
astro.config.mjs
. -
Atualize tipos (se necessário).
Se você tinha tipos especiais configurados para
@astrojs/image
emsrc/env.d.ts
, pode ser necessário alterá-los de volta para os tipos padrão do Astro se a atualização para a versão 3 não concluiu esta etapa automaticamente para você.Uma atualização similar se necessária deve ser aplicada no
tsconfig.json
: -
Migre quaisquer componentes
<Image />
.Modifique todas as declarações
import
de@astrojs/image/components
paraastro:assets
para utilizar o novo componente<Image />
integrado.Remova quaisquer atributos do componente que não são propriedades de asset de imagem atualmente suportadas.
Por exemplo,
aspectRatio
não é mais suportado, já que agora é automaticamente inferido dos atributoswidth
eheight
. -
Escolha o serviço de imagem padrão.
Sharp agora é o serviço de imagem padrão usado para
astro:assets
. Se você quiser utilizar Sharp, nenhuma configuração é necessária.Se você preferir utilizar Squoosh para transformar suas imagens, atualize sua configuração com a opção
image.service
a seguir:
Atualize Esquemas de Coleções de Conteúdo
Seção intitulada Atualize Esquemas de Coleções de ConteúdoAgora você pode declarar uma imagem associada a uma entrada de coleções de conteúdo, como a imagem de capa de uma postagem de blog, em seu frontmatter utilizando seu caminho relativo a pasta atual.
O novo utilitário image
para coleções de conteúdo te permite validar os metadados da imagem utilizando Zod. Aprenda mais sobre como utilizar imagens em coleções de conteúdo
Navegando Importações de Imagem no Astro v3.0
Seção intitulada Navegando Importações de Imagem no Astro v3.0No Astro v3.0, se você precisar preservar o antigo comportamento de importação para imagens e exigir uma representação de string do URL da imagem, adicione ?url
ao final do caminho da sua imagem ao importá-la. Por exemplo:
Essa abordagem garante que você obtenha a string de URL. Tenha em mente que, durante o desenvolvimento, o Astro usa um caminho src/
, mas, ao fazer build, ele gera caminhos com hash como /_astro/gato.a6737dd3.png
.
Se você preferir trabalhar diretamente com o próprio objeto de imagem, você pode acessar a propriedade .src
. Essa abordagem é melhor para tarefas como gerenciar as dimensões da imagem para métricas Core Web Vitals e prevenir o CLS.
Se você estiver em transição para o novo comportamento de importação, combinar os métodos ?url
e .src
pode ser o método certo para o manuseio de imagens ininterrupto.