Recortar imagem em caixa
Calcular o recorte de uma imagem parece simples até um processo automatizado receber coordenadas que ultrapassam o original por um pixel.
Executar grátis
Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.
Este validador recebe a largura e a altura da imagem de origem, além de uma caixa definida por x, y, largura e altura. Ele verifica cada valor, confirma que o retângulo inteiro permanece dentro da imagem e retorna as dimensões recortadas quando a caixa é válida. Nenhum upload ou decodificação é necessário, por isso a ferramenta é útil antes de acionar um processador de imagens, montar uma prévia de corte ou aceitar coordenadas vindas de outro serviço.
Descreva a imagem de origem e a caixa
Comece pelas dimensões em pixels da imagem original. Informe em image_width a contagem horizontal total de pixels e em image_height a contagem vertical total. Em seguida, descreva o retângulo com x, y, width e height. Os valores x e y posicionam o canto superior esquerdo da caixa em relação ao canto superior esquerdo da imagem, cuja coordenada é 0,0. Width avança para a direita e height para baixo. Os seis valores precisam ser inteiros, pois a capacidade representa cortes rasterizados alinhados aos pixels, e não geometria fracionária. As dimensões da imagem e do corte devem ser positivas; x e y podem ser zero. Por exemplo, x igual a 240 ignora as primeiras 240 colunas de pixels. A caixa pode encostar exatamente em qualquer borda. Portanto, x mais width pode ser igual a image_width, e y mais height pode ser igual a image_height. Use as dimensões do mesmo arquivo que será recortado; coordenadas de uma prévia redimensionada precisam ser escaladas antes.
Entenda como os limites são validados
O validador primeiro rejeita valores ausentes, números não inteiros, coordenadas negativas, caixas sem área e valores fora do intervalo documentado. Depois verifica as duas fronteiras que determinam a contenção. Na horizontal, x mais width deve ser menor ou igual a image_width. Na vertical, y mais height deve ser menor ou igual a image_height. Se alguma soma for maior, uma parte do corte estará fora da origem e a solicitação retornará um erro de entrada inválida. Essa regra explícita evita uma confusão comum de uma unidade: um corte com largura de 100 pixels iniciado em x 0 ocupa toda uma extensão de 100 pixels e cabe exatamente em uma imagem de 100 pixels. A capacidade não limita, desloca nem reduz uma caixa inválida, porque alterar coordenadas silenciosamente pode selecionar outro assunto ou composição. Ela também não examina os bytes da imagem. A decisão depende apenas das dimensões e coordenadas fornecidas, o que produz uma validação rápida, repetível e adequada tanto a formulários interativos quanto a pipelines automatizados.
Use o resultado antes de recortar de fato
Uma resposta bem-sucedida retorna a largura e a altura do corte resultante. Esses valores coincidem com a caixa solicitada porque esta capacidade valida geometria; ela não redimensiona nem altera o retângulo. Use a resposta como proteção antes de enviar as mesmas coordenadas a uma biblioteca gráfica, um serviço de mídia ou uma tarefa de renderização em fila. Assim, você separa a validação barata da decodificação mais cara e impede que falhas previsíveis cheguem aos processos seguintes. Em um editor, valide após a confirmação da seleção ou depois de converter as coordenadas da prévia em pixels da imagem original. Em um pipeline, confira os metadados assim que chegarem e encaminhe registros inválidos para correção. Considere a orientação: se outra etapa girar fisicamente a imagem, use as dimensões posteriores à rotação e coordenadas na mesma orientação. A solicitação à API custa US$ 0,002; o executor do navegador realiza localmente o mesmo cálculo determinístico. Nenhum dos caminhos envia a imagem, pois somente a geometria numérica é necessária.
Casos de uso
Proteja uma fila de processamento
Rejeite metadados fora dos limites antes que um processo baixe e decodifique a imagem.
Valide uma seleção de corte
Confirme se as coordenadas convertidas da prévia ainda cabem nas dimensões originais.
Confira metadados de mídia importados
Audite retângulos armazenados e encontre registros que não podem ser aplicados aos arquivos associados.
Perguntas frequentes
Esta capacidade recorta ou envia a imagem?
Não. Ela apenas valida dimensões e coordenadas numéricas e retorna o tamanho que o corte teria.
A caixa pode encostar nas bordas direita ou inferior?
Sim. Ela é válida quando x mais width equivale a image_width ou y mais height equivale a image_height.
Coordenadas fracionárias são aceitas?
Não. Todas as dimensões e coordenadas devem ser inteiras para manter o alinhamento aos pixels.
Uma caixa fora dos limites é ajustada automaticamente?
Não. A solicitação retorna um erro de entrada inválida em vez de alterar o corte pedido.
Quanto custa uma solicitação à API?
Cada solicitação à API custa US$ 0,002. A mesma validação determinística também está disponível no navegador.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/image/crop-to-box \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image_width":1920,"image_height":1080,"x":240,"y":120,"width":800,"height":600}'const res = await fetch("https://api.kit.forhosting.com/image/crop-to-box", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image_width": 1920,
"image_height": 1080,
"x": 240,
"y": 120,
"width": 800,
"height": 600
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/crop-to-box",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image_width": 1920,
"image_height": 1080,
"x": 240,
"y": 120,
"width": 800,
"height": 600
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/crop-to-box", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image_width":1920,"image_height":1080,"x":240,"y":120,"width":800,"height":600}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image_width":1920,"image_height":1080,"x":240,"y":120,"width":800,"height":600}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/crop-to-box", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"image_width": 1920,
"image_height": 1080,
"x": 240,
"y": 120,
"width": 800,
"height": 600
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.crop_to_box",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 15 |
max_megapixels | 12 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |