Marca d'água: calcule posição, escala e limites
Esta calculadora determina exatamente onde uma marca d'água ficará antes que qualquer pixel seja alterado.
Executar grátis
Informe as dimensões da imagem base e da marca, um multiplicador de escala e uma das nove posições de ancoragem. O resultado apresenta as coordenadas esquerda, superior, direita e inferior, além da largura e altura finais. A redução proporcional opcional acomoda uma marca grande demais sem modificar sua proporção.
Descreva as duas imagens no mesmo sistema de coordenadas
Comece pela largura e altura da imagem base e depois informe as dimensões naturais da marca d'água. Pixels são a unidade mais comum, mas qualquer unidade positiva e consistente funciona. O multiplicador de escala é aplicado igualmente à largura e à altura, preservando a proporção original. Uma escala de 0.5 reduz cada dimensão à metade, enquanto 2 duplica ambas. A calculadora rejeita dimensões ausentes, nulas, negativas, não numéricas ou infinitas, pois elas não formam um retângulo válido. Ela não examina nem modifica arquivos, não estima a arte visível dentro de áreas transparentes e não considera rotação. Use as dimensões completas da tela de cada imagem. A largura e a altura retornadas representam toda a tela posicionada da marca, inclusive pixels transparentes pertencentes ao arquivo de origem.
Escolha uma âncora e interprete a caixa delimitadora
A posição seleciona uma entre nove âncoras: quatro cantos, os pontos centrais de cada borda ou o centro exato. A origem fica no canto superior esquerdo, padrão das coordenadas de imagens rasterizadas: x cresce para a direita e y para baixo. Uma marca no canto superior esquerdo começa em zero nas duas coordenadas; no canto inferior direito, termina na largura e na altura da base. Opções centralizadas dividem igualmente o espaço restante e podem gerar valores decimais. A resposta fornece x e y para o canto superior esquerdo, width e height para o tamanho aplicado, e right e bottom para as bordas opostas. Juntos, esses valores formam a caixa exigida por muitas bibliotecas de imagem. Nenhuma margem é incluída. Se o projeto exigir afastamento, ajuste depois as coordenadas ou amplie previamente o retângulo conceitual.
Trate marcas grandes demais de modo deliberado
A escala é avaliada antes do posicionamento. Se a marca escalada exceder a largura ou a altura da imagem base, o comportamento padrão é emitir um erro de entrada, evitando recortes inesperados. Ative scale_down quando o ajuste automático for desejado. A calculadora escolhe a menor razão disponível entre larguras e alturas, aplica essa redução adicional uniformemente e garante que as duas dimensões caibam. Essa opção nunca amplia a marca; ela só age quando o tamanho solicitado é excessivo. A resposta inclui a escala efetivamente aplicada e o indicador scaled_down, permitindo que seu fluxo registre qualquer alteração. Assim, uma única regra pode atender imagens horizontais, verticais e miniaturas sem distorção. O cálculo é determinístico, não envia arquivos, não acessa a rede e custa US$ 0,002 por solicitação de API quando automatizado.
Casos de uso
Prepare um comando de sobreposição
Calcule coordenadas e dimensões exatas antes de enviar o logotipo e a base a uma biblioteca de processamento.
Valide regras responsivas
Teste a mesma escala e âncora em imagens para desktop, celular, retrato e miniaturas sem alterar arquivos.
Evite cortes acidentais
Rejeite uma marca excessiva ou ajuste-a proporcionalmente antes que o fluxo de produção aplique a sobreposição.
Perguntas frequentes
Esta capacidade modifica uma imagem?
Não. Ela apenas calcula a geometria e retorna uma caixa para uso por outro renderizador ou biblioteca.
Onde fica a origem das coordenadas?
No canto superior esquerdo da imagem base. x aumenta para a direita e y aumenta para baixo.
A escala preserva a proporção?
Sim. Um único multiplicador é aplicado às duas dimensões, inclusive no ajuste proporcional opcional.
O que acontece se a marca for grande demais?
A solicitação falha por padrão. Ative scale_down para reduzi-la proporcionalmente até que caiba.
A posição inclui margens?
Não. As âncoras encostam na borda correspondente ou centralizam o retângulo. Aplique depois o afastamento desejado.
Quanto custa uma solicitação de API?
O preço é US$ 0,002 por solicitação. O mesmo cálculo determinístico pode ser executado gratuitamente 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/watermark-image \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base_width":1200,"base_height":800,"watermark_width":300,"watermark_height":120}'const res = await fetch("https://api.kit.forhosting.com/image/watermark-image", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base_width": 1200,
"base_height": 800,
"watermark_width": 300,
"watermark_height": 120
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/watermark-image",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base_width": 1200,
"base_height": 800,
"watermark_width": 300,
"watermark_height": 120
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/watermark-image", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base_width":1200,"base_height":800,"watermark_width":300,"watermark_height":120}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base_width":1200,"base_height":800,"watermark_width":300,"watermark_height":120}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/watermark-image", 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
{
"base_width": 1200,
"base_height": 800,
"watermark_width": 300,
"watermark_height": 120
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.watermark_image",
"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. |