Girar imagem
A rotação de imagem endireita fotos que chegaram deitadas ou de cabeça para baixo, com giros de um quarto, meia ou três quartos de volta (90°, 180° ou 270°). Pela API, a correção vira etapa automática do seu fluxo — documentos fotografados, digitalizações e uploads de usuários entram tortos e saem no lugar.
Esta tarefa não está disponível no momento, portanto não pode ser contratada. Nada é cobrado por ela.
Ver a APIO mistério da foto que aparece deitada
Muitas fotos de celular não estão realmente tortas: o arquivo guarda os pixels deitados e uma etiqueta EXIF avisando “exiba girado”. Sistemas que ignoram a etiqueta mostram a foto deitada. A rotação resolve na raiz: aplica a orientação de fato nos pixels, e a imagem passa a aparecer certa em qualquer lugar — navegador antigo, sistema interno, impressão. É a correção definitiva para o clássico “no meu celular aparece certo”.
Rotação em ângulo reto, sem perda
As correções mais comuns são todas quartos de volta: 90° ou 270° põem de pé uma foto deitada, e 180° desvira uma digitalização de cabeça para baixo. Como são rotações em ângulo reto, os pixels apenas são reorganizados — nada é reamostrado nem inventado —, então a qualidade fica intacta e a única mudança é que largura e altura trocam de lugar num giro de 90° ou 270°. Endireitar por poucos graus uma foto levemente inclinada não faz parte desta capacidade.
Do arquivo avulso à esteira de digitalização
A chamada aceita JPG, PNG e WebP de até 15 MB e 12 megapixels, devolve um task_id e entrega o resultado pela tarefa. Em esteiras de digitalização — comprovantes, contratos, fichas fotografadas às pressas —, a rotação roda como etapa fixa antes do OCR ou do arquivamento, porque documento de cabeça para baixo atrapalha tanto a leitura humana quanto a automática. Uma imagem por chamada ou um script varrendo a pasta inteira: o custo unitário é o mesmo.
Cobrança por imagem
US$ 0,002 por chamada mais US$ 0,005 por imagem processada. Endireitar as 1.200 páginas fotografadas de um arquivo morto, uma por chamada, custa US$ 8,40 — por uso, sem assinatura nem franquia. O preço publicado na página é o único que existe: nenhum plano escondido aparece depois. Como não há cadastro, dá para testar com meia dúzia de arquivos, conferir o resultado e só então rodar o lote inteiro.
Casos de uso
Comprovantes fotografados de qualquer jeito
Os clientes da contadora Márcia Regina Oliveira mandam comprovantes pelo WhatsApp — metade de lado, alguns de cabeça para baixo. A rotação automática de 90° ou 180° arruma tudo antes do arquivamento, e a conferência mensal deixou de ser um exercício de torcicolo.
Acervo digitalizado com o scanner apressado
Ao digitalizar 30 anos de fichas, a equipe da Distribuidora Horizonte Verde S.A. alimentou o scanner em orientações variadas. Um script girou as páginas fora de esquadro — 90° ou 180° conforme o caso — em uma madrugada, sem redigitalizar nada.
Fotos de produto no lugar certo
Thiago Barbosa Lima fotografa móveis para o catálogo e algumas saem deitadas. Um giro de 90° aplicado via API na subida da foto deixou todas as imagens em pé, sem passar por edição manual.
Perguntas frequentes
Por que a mesma foto aparece certa no celular e deitada no site?
Porque o celular respeita a etiqueta de orientação EXIF e o site não. A rotação aplica a orientação nos próprios pixels, e a divergência some.
Girar 90° degrada a imagem?
Não: o giro em ângulo reto apenas reorganiza os pixels existentes, sem reamostrar nada. A única mudança é que largura e altura trocam de lugar num giro de 90° ou 270°.
Posso girar por um ângulo qualquer, tipo 5°?
Não. A rotação é só em ângulos retos: 0°, 90°, 180° ou 270°. Isso resolve fotos e digitalizações deitadas ou de cabeça para baixo; nivelar por poucos graus não é o objetivo desta capacidade.
Dá para girar cada foto em um ângulo diferente no mesmo lote?
Sim — o ângulo (0, 90, 180 ou 270) é parâmetro de cada chamada, então um script pode aplicar a correção específica de cada arquivo.
Qual o preço para um arquivo morto inteiro?
US$ 0,002 por chamada mais US$ 0,005 por imagem: 5.000 páginas, uma por chamada, custam US$ 35. Sem mensalidade — pagou, processou, acabou.
Documentos com dados pessoais podem ser enviados?
O processamento existe só para executar a sua tarefa: o arquivo não é publicado nem reutilizado, e o resultado fica disponível para você baixar. É o arranjo que a LGPD pede para dados de terceiros.
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
One authenticated POST creates the task; the result comes back by webhook or a signed link. This capability is currently available through the API, not as an interactive Web tool.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/image/rotate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/image/rotate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/rotate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/rotate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/rotate", 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": "https://ejemplo.com/imagen.jpg"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.rotate",
"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. |