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
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
Você 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
Em 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.
<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
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)
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/
)
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
podem ser inferidos automaticamente do arquivo fonte e são opcionais.
Porém, ambas essas propriedades são obrigatórias para imagens remotas e imagens armazenadas em sua pasta public/
já que o Astro é incapaz de analisar esses arquivos.
densities
Adicionado em:astro@3.3.0
Experimental
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
Adicionado em:astro@3.3.0
Experimental
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
Você 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
quality
é 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).
Propriedades adicionais
Em 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
Atualmente, 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 />
Adicionado em:
astro@3.3.0
Experimental
Utilize o componente <Picture />
integrado do Astro para exibir uma imagem responsiva com vários formatos e/ou tamanhos.
Propriedades
<Picture />
aceita todas as propriedades do componente <Image />
, juntamente com:
formats
Um 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
Formato a ser usado como um valor de fallback para a tag <img>
.
Por padrão, é configurado como .png
para imagens estáticas, .gif
para imagens animadas e .svg
para arquivos SVG.
pictureAttributes
Um 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.
<img>
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/
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/
Para imagens localizadas em public/
utilize o caminho do arquivo relativo a pasta public da imagem como o valor src
:
Imagens remotas
Para imagens remotas, utilize a URL completa da imagem como o valor de src
:
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
Você 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
CDNs 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
Utilize a sintaxe padrão do Markdown ![alt](src)
em seus arquivos .md
. Essa sintaxe funciona com a API de Serviço de Imagem (EN) 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 (EN) para adicionar suporte para MDX ao Astro.
Imagens em arquivos MDX
Você 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
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
Ao 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
O 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()
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
Nem 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 o componente <Image />
. <Image />
irá lançar um erro se nenhum texto alternativo for fornecido.
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
Sharp é o serviço de imagem padrão utilizado em astro:assets
.
Se você preferir utilizar Squoosh para transformar suas imagens, atualize sua configuração com o seguinte:
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:
Integrações da Comunidade
Há 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
astro: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 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
Remova 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
Esse 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
Astro 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
Veja 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
Anteriormente, 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
Imagens 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 (EN) para adicionar suporte de MDX para Astro.
Remova @astrojs/image
Se 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
Agora 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
No 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.