Mise en page de texte pour mème
Le générateur de mise en page de texte pour mème transforme la largeur et la hauteur d’une image, ainsi que deux légendes, en instructions de dessin directement exploitables.
Lancer gratuitement
Il choisit une taille de police lisible commune, répartit chaque légende sur plusieurs lignes et renvoie des cadres en pixels ancrés près des bords supérieur et inférieur. Le calcul est déterministe : une entrée identique produit toujours les mêmes coordonnées. Utilisez le résultat avec Canvas, SVG, une bibliothèque d’images ou un service de rendu afin d’obtenir une typographie homogène sans ajuster la taille par essais successifs.
Indiquez le canevas et les deux légendes
Saisissez la largeur et la hauteur de l’image en pixels, puis le texte destiné au haut et au bas. Les deux légendes sont obligatoires, car cette mise en page équilibre un mème complet composé de deux zones de texte. Les espaces placés au début et à la fin sont supprimés, et les espaces répétés sont normalisés avant la mesure. Une légende vide déclenche donc une erreur de saisie plutôt qu’un cadre trompeur de taille nulle. Les dimensions doivent être des nombres entiers compris entre 64 et 10,000 pixels, tandis que chaque légende accepte jusqu’à 500 caractères. Ces limites assurent un calcul prévisible sur la page interactive comme dans un traitement automatisé. La marge dépend du plus petit côté de l’image, ce qui conserve un espacement visuel similaire en portrait, en paysage et au format carré. Si l’image doit être redimensionnée, effectuez le calcul avec ses dimensions finales.
Comprenez l’ajustement et le retour à la ligne
Le calculateur choisit une taille de police entière commune aux deux légendes. Il part d’une valeur issue des dimensions de l’image, puis essaie des tailles progressivement plus petites jusqu’à ce que les blocs du haut et du bas tiennent dans l’espace prévu. Chaque légende peut occuper jusqu’à quarante-deux pour cent de la hauteur utile, afin de préserver une séparation même lorsque plusieurs lignes sont nécessaires. Les mots restent entiers dans la mesure du possible. Si un mot dépasse la largeur disponible, il est découpé pour empêcher le cadre de sortir de l’image. Les estimations reposent sur un profil interne stable de caractères gras et condensés : les signes étroits occupent moins de place que les grandes capitales. Il s’agit d’une estimation analytique et non d’une mesure de police par le navigateur. Pour un rendu proche, choisissez une police condensée et grasse similaire à Impact, respectez l’interligne fourni et centrez chaque ligne.
Effectuez le rendu de la géométrie obtenue
Le résultat contient la taille de police retenue, l’interligne, la marge extérieure et deux objets distincts pour le haut et le bas. Chaque objet fournit les lignes calculées, ainsi que les coordonnées x et y, la largeur et la hauteur en pixels. Le cadre supérieur commence à la marge déterminée. Le cadre inférieur se termine à la même distance du bord bas, si bien que sa position reste stable quel que soit le nombre de lignes. Dessinez les lignes depuis la coordonnée y du cadre, en avançant selon l’interligne, et centrez-les par rapport à l’image entière. Si votre API graphique place le texte sur sa ligne de base, ajoutez auparavant l’ascendante de la police choisie. L’épaisseur du contour, l’ombre, les majuscules et la couleur sont volontairement exclus : ils modifient l’apparence, pas la zone réservée. Dans une automatisation, conservez ces valeurs avec les légendes pour reproduire exactement la composition.
Cas d’usage
Créer un générateur de mèmes
Calculez une géométrie cohérente avant de dessiner du texte sur les modèles d’image choisis par vos utilisateurs.
Préparer des commandes Canvas ou SVG
Transformez deux légendes en lignes et en cadres de pixels directement utilisables par un moteur de rendu.
Automatiser les visuels pour les réseaux sociaux
Produisez des mises en page reproductibles pour des lots d’images légendées sans tester manuellement plusieurs tailles.
Questions fréquentes
Quel est le prix du calcul ?
Chaque requête API coûte $0.002. Le même calcul déterministe peut également être exécuté dans le navigateur.
Pourquoi les deux légendes doivent-elles contenir du texte ?
Cette capacité calcule une mise en page équilibrée à deux légendes. Un texte supérieur ou inférieur vide, ou composé uniquement d’espaces, est refusé.
Le résultat modifie-t-il mon image ?
Non. Il renvoie uniquement des données de police et de géométrie. Utilisez-les avec le moteur d’image, Canvas ou SVG de votre choix.
Quelle police faut-il employer pour le rendu ?
Une police grasse et condensée dont les métriques ressemblent à celles d’Impact correspondra au mieux aux estimations internes.
Un mot long peut-il dépasser de l’image ?
Non. Un mot plus large que la zone utile est découpé afin que tous les cadres restent à l’intérieur des marges horizontales.
Pourquoi les deux légendes partagent-elles la même taille ?
Une taille commune donne un poids visuel homogène. La plus petite taille requise par l’une des légendes est appliquée aux deux.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"width": 1200,
"height": 800,
"top_caption": "WHEN THE TESTS PASS",
"bottom_caption": "ON THE FIRST TRY"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.meme_text_layout",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_width | 10000 |
max_height | 10000 |
max_chars | 500 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |