Layout del testo per meme
Il generatore di layout del testo per meme trasforma larghezza e altezza di un’immagine, insieme a due didascalie, in istruzioni di disegno utilizzabili.
Esegui gratis nel browser
Seleziona un’unica dimensione leggibile per il carattere, distribuisce ogni didascalia su più righe e restituisce riquadri in pixel ancorati vicino ai bordi superiore e inferiore. Il calcolo è deterministico: gli stessi dati producono sempre le medesime coordinate. Lei può usare il risultato con Canvas, SVG, una libreria di immagini o un servizio di rendering per ottenere una tipografia uniforme senza procedere per tentativi nella scelta delle dimensioni.
Indichi il formato e le due didascalie
Inserisca la larghezza e l’altezza dell’immagine in pixel, quindi il testo destinato alla parte superiore e a quella inferiore. Entrambe le didascalie sono obbligatorie, perché questo layout bilancia un meme completo con due aree di testo. Gli spazi iniziali e finali vengono eliminati, mentre quelli ripetuti all’interno vengono normalizzati prima della misurazione. Una didascalia vuota genera quindi un errore di input, non un riquadro ingannevole di dimensione nulla. Le dimensioni devono essere numeri interi compresi tra 64 e 10,000 pixel; ogni testo può contenere fino a 500 caratteri. Questi limiti rendono il calcolo prevedibile sia nella pagina interattiva sia in un processo automatico. Il margine dipende dal lato più corto e conserva una distanza visiva simile nei formati verticale, orizzontale e quadrato. Se l’immagine verrà ridimensionata, esegua il calcolo sulle dimensioni finali.
Comprenda adattamento e ritorno a capo
Il calcolatore sceglie una dimensione intera del carattere condivisa dalle due didascalie. Parte da un valore ricavato dalle dimensioni dell’immagine e prova misure progressivamente inferiori finché entrambi i blocchi rientrano nello spazio assegnato. Ciascuna didascalia può usare fino al quarantadue per cento dell’altezza utile, lasciando una separazione anche quando entrambe occupano più righe. Le parole restano intere quando possibile. Se una parola supera la larghezza disponibile, viene suddivisa affinché il suo riquadro non esca dall’immagine. Le stime utilizzano un profilo interno stabile per caratteri spessi e condensati: i segni stretti occupano meno spazio, le maiuscole larghe ne occupano di più. È una stima analitica, non una misurazione del font nel browser. Per avvicinarsi al risultato, usi un carattere condensato in grassetto simile a Impact, applichi l’interlinea restituita e centri ogni riga.
Renderizzi la geometria in pixel
Il risultato comprende la dimensione del carattere selezionata, l’interlinea, il margine esterno e oggetti separati per le aree superiore e inferiore. Ogni oggetto contiene le righe calcolate e le coordinate x e y, la larghezza e l’altezza in pixel. Il riquadro superiore inizia dal margine stabilito. Quello inferiore termina alla stessa distanza dal bordo basso, mantenendo stabile la posizione a prescindere dal numero di righe. Disegni le righe a partire dalla coordinata y del riquadro, avanzando secondo l’interlinea, e le centri rispetto all’intera immagine. Se la sua API grafica posiziona il testo sulla linea di base, aggiunga prima l’ascendente del font scelto. Spessore del contorno, ombra, maiuscole e colore sono esclusi intenzionalmente: cambiano l’aspetto, non la geometria riservata. Nei processi automatici, salvi questi valori insieme alle didascalie per riprodurre la composizione senza nuovi tentativi manuali.
Casi d'uso
Creare un generatore di meme
Calcoli una geometria uniforme prima di disegnare il testo sui modelli di immagine scelti dai suoi utenti.
Preparare comandi Canvas o SVG
Converta due didascalie in righe e riquadri in pixel utilizzabili direttamente da un motore di rendering.
Automatizzare immagini per i social
Produca layout ripetibili per lotti di immagini con testo senza provare manualmente diverse dimensioni.
Domande frequenti
Quanto costa il calcolo?
Ogni richiesta API costa $0.002. Lo stesso calcolo deterministico può essere eseguito anche nel browser.
Perché entrambe le didascalie devono contenere testo?
Questa capacità calcola un layout bilanciato con due didascalie. Un testo superiore o inferiore vuoto, o composto solo da spazi, viene rifiutato.
Il risultato modifica la mia immagine?
No. Restituisce soltanto dati relativi a font e geometria. Li usi con il motore di immagini, Canvas o SVG che preferisce.
Quale font devo usare nel rendering?
Un carattere condensato in grassetto con metriche simili a Impact corrisponde meglio alle stime interne.
Una parola lunga può uscire dall’immagine?
No. Se supera l’area utile, viene suddivisa affinché tutti i riquadri restino entro i margini orizzontali.
Perché le due didascalie usano la stessa dimensione?
Una misura condivisa dà al meme un peso visivo uniforme. La misura minore richiesta da una delle due viene applicata a entrambe.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/image/meme-text-layout \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"width":1200,"height":800,"top_caption":"WHEN THE TESTS PASS","bottom_caption":"ON THE FIRST TRY"}'const res = await fetch("https://api.kit.forhosting.com/image/meme-text-layout", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"width": 1200,
"height": 800,
"top_caption": "WHEN THE TESTS PASS",
"bottom_caption": "ON THE FIRST TRY"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/meme-text-layout",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"width": 1200,
"height": 800,
"top_caption": "WHEN THE TESTS PASS",
"bottom_caption": "ON THE FIRST TRY"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/meme-text-layout", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"width":1200,"height":800,"top_caption":"WHEN THE TESTS PASS","bottom_caption":"ON THE FIRST TRY"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"width":1200,"height":800,"top_caption":"WHEN THE TESTS PASS","bottom_caption":"ON THE FIRST TRY"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/meme-text-layout", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"width": 1200,
"height": 800,
"top_caption": "WHEN THE TESTS PASS",
"bottom_caption": "ON THE FIRST TRY"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.meme_text_layout",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_width | 10000 |
max_height | 10000 |
max_chars | 500 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |