Este guia descreve como trabalhar com imagens no Claude, incluindo melhores práticas, exemplos de código e limitações a serem consideradas.
Use as capacidades de visão do Claude através de:
Várias imagens podem ser incluídas em uma única requisição, e o Claude as analisará em conjunto ao formular sua resposta. Isso pode ser útil para comparar ou contrastar imagens.
O número máximo de imagens por mensagem ou requisição é:
As dimensões máximas por imagem são 8000x8000 px. Se você enviar mais de 20 imagens em uma requisição de API, esse limite é reduzido para 2000x2000 px.
O tamanho máximo por imagem é:
Embora a API suporte até 600 imagens por requisição, os limites de tamanho de requisição (32 MB para endpoints padrão; menor em algumas plataformas operadas por parceiros, por exemplo, Amazon Bedrock e Vertex AI) podem ser atingidos primeiro. Para muitas imagens, considere fazer upload com a Files API e referenciar por file_id para manter os payloads de requisição pequenos.
Mesmo ao usar a Files API, requisições com muitas imagens grandes podem falhar antes de atingir a contagem de 600 imagens. Reduza as dimensões ou tamanhos de arquivo das imagens (por exemplo, por downsampling) antes de fazer upload (veja Avaliar o tamanho da imagem).
O Claude visualiza imagens em patches em vez de pixels. Cada patch é um bloco de 28×28 pixels da imagem, chamado de token visual. Uma imagem, portanto, custa ⌈width / 28⌉ × ⌈height / 28⌉ tokens visuais.
Se o Claude receber uma imagem muito grande, ele a redimensiona. A resolução nativa máxima de imagem é:
Se sua imagem de entrada for maior que essa resolução nativa, ela é primeiro redimensionada para o maior tamanho possível que preserve a proporção. Todas as imagens, redimensionadas ou não, são então preenchidas nas bordas inferior e direita até um múltiplo de 28 pixels. Veja Como o Claude redimensiona e preenche imagens para a regra exata.
Ao pedir ao Claude para gerar coordenadas (pontos, bounding boxes, e assim por diante), ele funciona melhor com coordenadas absolutas em pixels expressas em relação à imagem redimensionada que ele vê. Veja Trabalhando com coordenadas e bounding boxes para saber como lidar com isso.
Para minimizar a latência e simplificar fluxos de trabalho baseados em coordenadas, você deve preferir redimensionar as imagens antes de fazer upload.
Cada imagem que você inclui em uma requisição ao Claude conta para seu uso de tokens. Para calcular o custo aproximado, multiplique a contagem de tokens visuais da imagem (veja Avaliar o tamanho da imagem) pelo preço por token do modelo que você está usando.
Aqui estão exemplos de tokenização e custos aproximados para diferentes tamanhos de imagem dentro das restrições de tamanho da API, com base no preço por token do Claude Sonnet 4.6 de $3 por milhão de tokens de entrada:
| Tamanho da imagem | Nº de Tokens | Custo / imagem | Custo / 1k imagens |
|---|---|---|---|
| 200x200 px(0,04 megapixels) | 64 | ~$0,00019 | ~$0,19 |
| 1000x1000 px(1 megapixel) | 1296 | ~$0,0039 | ~$3,89 |
| 1092x1092 px(1,19 megapixels) | 1521 | ~$0,0046 | ~$4,56 |
| 1920x1080 px(2,07 megapixels) | 1560 | ~$0,0047 | ~$4,68 |
| 2000x1500 px(3 megapixels) | 1564 | ~$0,0047 | ~$4,69 |
| 3840x2160 px(8,29 megapixels) | 1560 | ~$0,0047 | ~$4,68 |
Observe que as três últimas imagens excedem a resolução nativa e são reduzidas antes do processamento (para 1456x819 px, 1270x952 px e 1456x819 px respectivamente), o que limita seu custo em tokens. A imagem 4K não custa mais do que a imagem 1920x1080 porque ambas são reduzidas para o mesmo tamanho; a resolução extra é descartada.
O Claude Opus 4.7 é o primeiro modelo Claude com suporte a imagens de alta resolução; Claude Opus 4.8, Claude Fable 5, Claude Mythos 5 e modelos posteriores também o suportam. A resolução máxima de imagem é de 2576 pixels na borda mais longa, acima dos 1568 px em modelos anteriores. Isso desbloqueia ganhos de desempenho em cargas de trabalho intensivas em visão e é particularmente valioso para uso de computador, compreensão de capturas de tela e análise de documentos.
O suporte a alta resolução é automático no Claude Opus 4.7 e modelos posteriores e não requer cabeçalho beta ou opt-in do lado do cliente.
Imagens de alta resolução no Claude Opus 4.7, Claude Opus 4.8, Claude Fable 5 e Claude Mythos 5 podem usar até aproximadamente 3x mais tokens de imagem do que em modelos anteriores (4784 versus 1568 tokens por imagem). Se você não precisa da fidelidade adicional, reduza a resolução das imagens antes de enviá-las para controlar os custos de tokens.
Aqui estão os mesmos tamanhos de imagem tokenizados para Claude Opus 4.7 e Claude Opus 4.8, com base em seu preço por token de $5 por milhão de tokens de entrada:
| Tamanho da imagem | Nº de Tokens | Custo / imagem | Custo / 1k imagens |
|---|---|---|---|
| 200x200 px(0,04 megapixels) | 64 | ~$0,00032 | ~$0,32 |
| 1000x1000 px(1 megapixel) | 1296 | ~$0,0065 | ~$6,48 |
| 1092x1092 px(1,19 megapixels) | 1521 | ~$0,0076 | ~$7,61 |
| 1920x1080 px(2,07 megapixels) | 2691 | ~$0,013 | ~$13,46 |
| 2000x1500 px(3 megapixels) | 3888 | ~$0,019 | ~$19,44 |
| 3840x2160 px(8,29 megapixels) | 4784 | ~$0,024 | ~$23,92 |
Apenas a última imagem excede os limites mais altos: a imagem 4K é reduzida para 2576x1449 px antes do processamento. O suporte a alta resolução aumenta os limites de resolução, mas não os remove; imagens maiores que 2576 px na borda mais longa (ou 4784 tokens visuais) ainda são reduzidas.
Ao fornecer imagens ao Claude, tenha em mente o seguinte para obter melhores resultados:
O Claude pode localizar e rotular regiões de uma imagem (por exemplo, retornando "bounding boxes" (caixas delimitadoras) para tabelas, campos de formulário, elementos de gráfico ou componentes de UI).
O Claude funciona melhor com coordenadas absolutas em pixels. Peça por elas explicitamente em seu prompt. Por exemplo: "Retorne a bounding box de cada tabela como [x1, y1, x2, y2] em coordenadas de pixel." O Claude não funciona bem quando você pede coordenadas normalizadas, por exemplo: "Retorne coordenadas de bounding box entre 0 e 1000." Sempre peça coordenadas em pixels e normalize em seu próprio código se precisar.
As coordenadas seguem a convenção padrão de imagem: a origem (0, 0) é o canto superior esquerdo da imagem, com x aumentando para a direita e y aumentando para baixo. As coordenadas que o Claude retorna são posições de pixel na imagem que o Claude vê: sua imagem depois que o Claude a redimensiona para caber na resolução nativa do modelo (veja Como o Claude redimensiona e preenche imagens). Para obter coordenadas que você possa usar diretamente, pré-redimensione sua imagem para que as coordenadas mapeiem um-para-um na imagem que você tem (veja Redimensione sua imagem antes de fazer upload), ou reescale as coordenadas que o Claude retorna (veja Reescalar coordenadas quando você não pode pré-redimensionar).
O raciocínio espacial do Claude tem limites (veja Limitações). A precisão das coordenadas é melhor quando você declara o formato de coordenadas esperado em seu prompt e verifica visualmente os resultados antes de processar em escala. Para uploads de PDF, as páginas são rasterizadas para imagens no lado do servidor em dimensões que você não controla, então as coordenadas retornadas não podem ser mapeadas de volta para a página de forma confiável. Para trabalhar com coordenadas em conteúdo PDF, rasterize as páginas para imagens você mesmo e use a abordagem de pré-redimensionamento.
O Claude encontra o maior tamanho que preserva a proporção e satisfaz ambos os limites de imagem do modelo:
⌈width / 28⌉ × ⌈height / 28⌉ não excede o orçamento de tokens visuais do modelo (1568 tokens para a maioria dos modelos, 4784 para Claude Opus 4.7 e modelos posteriores).Para a maioria das fotos e capturas de tela, o limite de borda é o que aciona um redimensionamento. Para documentos em retrato, o limite de tokens visuais geralmente é acionado primeiro, e ignorá-lo é a causa mais comum de coordenadas desalinhadas. Por exemplo, uma página A4 digitalizada a 130 DPI tem 1075×1520 pixels: ambos os lados estão abaixo de 1568 px, mas custa 39 × 55 = 2145 tokens visuais, então o Claude a redimensiona para 924×1307.
O Claude então preenche cada imagem, tenha sido redimensionada ou não, até o próximo múltiplo de 28 pixels nas bordas inferior e direita (924×1307 torna-se 924×1316 no exemplo). O preenchimento não contém conteúdo: o Claude percebe a imagem preenchida, mas o conteúdo da página ocupa apenas a região redimensionada sem preenchimento. Sempre normalize ou reescale pelas dimensões redimensionadas, não pelas dimensões preenchidas; dividir pelas dimensões preenchidas escala cada coordenada por uma pequena quantidade.
A abordagem mais confiável é redimensionar sua imagem você mesmo antes de fazer upload, para que a imagem que você tem seja exatamente a imagem que o Claude vê e as coordenadas que o Claude retorna não precisem de conversão.
A seguinte implementação de referência calcula o tamanho exato para o qual o Claude redimensiona uma imagem:
import math
def count_image_tokens(width: int, height: int) -> int:
"""Visual tokens consumed by an image: one token per 28x28 pixel patch."""
return math.ceil(width / 28) * math.ceil(height / 28)
def resized_size(
width: int,
height: int,
max_edge: int = 1568,
max_tokens: int = 1568,
) -> tuple[int, int]:
"""The size Claude resizes an image to before padding.
Defaults are for most models. For Claude Opus 4.7 and later models, use
max_edge=2576 and max_tokens=4784. Returns (width, height). Images that
already fit within the limits are returned unchanged.
"""
def fits(w: int, h: int) -> bool:
return (
math.ceil(w / 28) * 28 <= max_edge
and math.ceil(h / 28) * 28 <= max_edge
and count_image_tokens(w, h) <= max_tokens
)
if fits(width, height):
return (width, height)
if height > width:
resized_h, resized_w = resized_size(height, width, max_edge, max_tokens)
return (resized_w, resized_h)
# Busca binária ao longo da borda maior para o maior tamanho que preserva
# a proporção e ainda cabe.
aspect_ratio = width / height
lo, hi = 1, width # lo always fits; hi never fits
while lo + 1 < hi:
mid = (lo + hi) // 2
if fits(mid, max(round(mid / aspect_ratio), 1)):
lo = mid
else:
hi = mid
return (lo, max(round(lo / aspect_ratio), 1))
# O exemplo A4 de "How Claude resizes and pads images":
print(resized_size(1075, 1520)) # (924, 1307)resized_size. Se a imagem já couber dentro dos limites do modelo, resized_size retorna suas dimensões inalteradas e nenhum redimensionamento é necessário.[x1, y1, x2, y2] em coordenadas de pixel."Se você não puder pré-redimensionar (por exemplo, quando a imagem vem de um sistema upstream que você não pode modificar), use resized_size de Redimensione sua imagem antes de fazer upload para recuperar as dimensões que o Claude viu, então mapeie as coordenadas que o Claude retorna para coordenadas normalizadas ou de volta para sua imagem original. Essa abordagem requer conhecer as dimensões em pixels da imagem que você enviou, então não se aplica a uploads de PDF.
def to_relative_coordinates(
x: float,
y: float,
original_width: int,
original_height: int,
max_edge: int = 1568,
max_tokens: int = 1568,
) -> tuple[float, float]:
"""Map a pixel coordinate returned by Claude to relative coordinates in [0, 1].
Pass the dimensions of the image you uploaded. For Claude Opus 4.7 and
later models, use max_edge=2576 and max_tokens=4784.
"""
resized_w, resized_h = resized_size(
original_width, original_height, max_edge, max_tokens
)
return (x / resized_w, y / resized_h)
# Para expressar a coordenada no espaço de pixels da sua imagem original, multiplique a
# coordenada relativa pelas dimensões originais:
# (rel_x * original_width, rel_y * original_height)O preenchimento é aplicado apenas às bordas inferior e direita, então a origem não se desloca e um reescalonamento linear por eixo é suficiente.
Muitas das técnicas de prompting que funcionam bem para interações baseadas em texto com o Claude também podem ser aplicadas a prompts baseados em imagem.
Esses exemplos demonstram estruturas de prompt de melhores práticas envolvendo imagens.
Assim como colocar documentos longos antes de sua consulta melhora os resultados em prompts de texto, o Claude funciona melhor quando as imagens vêm antes do texto. Imagens colocadas após o texto ou intercaladas com texto ainda funcionam bem, mas se seu caso de uso permitir, prefira uma estrutura imagem-depois-texto.
Os exemplos a seguir demonstram como usar as capacidades de visão do Claude usando várias linguagens de programação e abordagens. Você pode fornecer imagens ao Claude de três maneiras:
imageNo Amazon Bedrock e Vertex AI, apenas fontes codificadas em base64 estão disponíveis atualmente.
Os exemplos de prompt em base64 usam estas variáveis:
Abaixo estão exemplos de como incluir imagens em uma requisição da Messages API usando imagens codificadas em base64 e referências de URL:
Para imagens que você usará repetidamente ou quando quiser evitar a sobrecarga de codificação, use a Files API. Faça upload da imagem uma vez, depois referencie o file_id retornado em mensagens subsequentes em vez de reenviar dados base64.
Em conversas de múltiplos turnos e fluxos de trabalho agênticos, cada requisição
reenvia o histórico completo da conversa. Se as imagens forem codificadas em base64,
os bytes completos da imagem são incluídos no payload a cada turno, o que pode
aumentar significativamente o tamanho da requisição e a latência à medida que a
conversa cresce. Fazer upload de imagens para a Files API e referenciá-las por
file_id mantém os payloads de requisição pequenos, independentemente de quantas
imagens se acumulam no histórico da conversa.
Veja exemplos da Messages API para mais exemplos de código e detalhes de parâmetros.
Embora as capacidades de compreensão de imagem do Claude sejam de ponta, há algumas limitações a serem consideradas:
Sempre revise e verifique cuidadosamente as interpretações de imagem do Claude, especialmente para casos de uso de alto risco. Não use o Claude para tarefas que exigem precisão perfeita ou análise de imagem sensível sem supervisão humana.
Pronto para começar a construir com imagens usando o Claude? Aqui estão alguns recursos úteis:
Se você tiver outras perguntas, entre em contato com a equipe de suporte. Você também pode participar da comunidade de desenvolvedores para se conectar com outros criadores e obter ajuda de especialistas da Anthropic.
Was this page helpful?
import base64
import httpx
# Para imagens codificadas em base64
image1_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
image1_media_type = "image/jpeg"
image1_data = base64.standard_b64encode(httpx.get(image1_url).content).decode("utf-8")
image2_url = "https://upload.wikimedia.org/wikipedia/commons/b/b5/Iridescent.green.sweat.bee1.jpg"
image2_media_type = "image/jpeg"
image2_data = base64.standard_b64encode(httpx.get(image2_url).content).decode("utf-8")
# Para imagens baseadas em URL, você pode usar as URLs diretamente nas suas requisiçõesimage1_data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4z8AAAAMBAQDJ/pLvAAAAAElFTkSuQmCC"
image1_media_type = "image/png"
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": image1_media_type,
"data": image1_data,
},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message)client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message)client = anthropic.Anthropic()
# Faça upload do arquivo de imagem
with open("image.jpg", "rb") as f:
file_upload = client.beta.files.upload(file=("image.jpg", f, "image/jpeg"))
# Use o arquivo enviado em uma mensagem
message = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
betas=["files-api-2025-04-14"],
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {"type": "file", "file_id": file_upload.id},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message.content)