Como escrever texto em imagem sem abrir editor
Escreva texto por cima de qualquer imagem via API: você manda a foto, o texto, a posição e o estilo, e recebe a imagem pronta. É o jeito de automatizar peças repetitivas — preço sobre foto de produto, nome sobre certificado, aviso sobre banner — sem abrir editor.
Rode online
Rode nos nossos servidores com a sua conta. As ferramentas grátis rodam no seu navegador; esta aqui é descontada do seu saldo do KIT pelo preço acima.
A mesma arte, mil variações
O caso clássico: você tem um modelo bonito e só o texto muda. Nome do aluno no certificado, preço da oferta da semana, título do post no blog. Fazer isso à mão significa abrir o editor, trocar o texto, exportar e repetir — vinte, cem, mil vezes. Com a API, o modelo fica fixo e o texto vira um parâmetro da chamada: seu sistema gera cada variação em segundos, sempre alinhada, sempre com o mesmo estilo, sem ninguém tocando em arquivo.
Você controla o resultado
Na chamada vão o conteúdo do texto, a posição sobre a imagem, o tamanho e a cor. A dica de quem faz peça que funciona: contraste antes de estética — texto claro sobre área escura da foto, ou o contrário, e nada de espremer frase longa em espaço pequeno. Acentos e cedilha saem corretos, o que importa bastante quando o texto é “Promoção de inauguração” e não um genérico em inglês.
Onde encaixar no seu sistema
A tarefa roda de forma assíncrona: o sistema envia a imagem e o texto, recebe um task_id e coleta a peça pronta na sequência. Isso encaixa em qualquer gatilho — venda concluída que gera comprovante visual, aluno aprovado que recebe certificado, produto cadastrado que ganha banner. Arquivos de até 15 MB e 12 megapixels, nos formatos comuns de imagem; a peça volta pronta para publicar ou mandar por e-mail.
Custo por peça gerada
US$ 0,002 por chamada mais US$ 0,005 por imagem — gerar 300 certificados personalizados custa cerca de US$ 1,50. Não existe mensalidade nem pacote: o custo acompanha exatamente o volume que você gerar no mês, e o preço fica publicado nesta página para você fazer a conta antes de integrar.
Casos de uso
Certificados com o nome de cada aluno
Uma escola de cursos online gera o certificado de Carlos Eduardo Souza — e o dos outros 400 formandos — escrevendo o nome de cada um sobre o mesmo modelo, na hora da conclusão do curso.
Oferta da semana sem chamar o designer
A TecnoSul Soluções Digitais atualiza os preços das promoções toda segunda-feira. O sistema pega a arte base e escreve o valor novo em cima — o designer fez o modelo uma vez e nunca mais foi interrompido.
Status carimbado na foto do imóvel
Quando o apartamento é vendido, o portal escreve “Vendido” sobre a foto de capa do anúncio de forma automática. O visitante entende na hora, sem clicar, e a equipe não edita imagem nenhuma.
Perguntas frequentes
Posso usar a mesma imagem de fundo e trocar só o texto?
Sim — é o uso mais comum: o modelo fica fixo e cada chamada escreve um texto diferente sobre ele.
Acentos, til e cedilha aparecem certinhos?
Aparecem. “Ação”, “promoção” e “São Paulo” saem como devem — sem trocar ç por c nem comer o til.
Quanto sai cada imagem gerada?
US$ 0,005 por imagem, mais US$ 0,002 pela chamada. Pague por uso, sem plano fixo.
Em que formato a imagem volta?
No mesmo formato do arquivo enviado, dentro dos formatos comuns de foto e arte — pronto para publicar.
O texto pode ir em qualquer posição da imagem?
Pode: a posição é um parâmetro da chamada. Centralizado, no rodapé, no canto — você define e o resultado se repete igual em todas as peças.
As artes que eu envio ficam com vocês?
Ficam apenas o tempo de processar a tarefa e devolver a peça pronta — não são publicadas nem usadas para nada além da sua chamada.
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/text-overlay \
-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/text-overlay", {
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/text-overlay",
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/text-overlay", 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/text-overlay", 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.text_overlay",
"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. |