Je trouve que l' -annotate
opérateur d' ImageMagick est un peu plus pratique que la -draw
méthode suggérée par garethTheRed, pour la simple raison qu'il ne nécessite pas de modification du fichier d'entrée. Ce n'est pas aussi puissant que -draw
, mais pour le dumping en gros du contenu d'un fichier texte dans une image, il sert très bien.
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png
affichera une version rendue du contenu du fichier donné, mais sans avoir à modifier votre fichier "ascii.txt" pour contenir la text 15x15
partie de la -draw
primitive.
Spécification des arguments
L'argument to -font
peut être n'importe quel nom de police pris en charge, si FreeMono n'est pas disponible (ou n'est tout simplement pas souhaité). Une liste des polices disponibles pour toute commande ImageMagick peut être obtenue à l'aide de l' -list
opérateur, donc convert -list font
affichera tous les arguments possibles pour -font
.
Les arguments pour -annotate
(jusqu'où déplacer le texte rendu du bord du canevas) consistent en des décalages de pixels horizontaux et verticaux (respectivement). Le premier décalage (décalage horizontal x) peut être n'importe quel entier positif, mais ne doit pas être supérieur à quelques pixels. Le deuxième décalage (décalage vertical y) doit être au moins égal à la taille en points de la police choisie (l'argument à -pointsize
), car ImageMagick placera la ligne de base de la police au décalage donné. Donc, si vous ne diminuez pas la police d'au moins pointsize
pixels, le haut de la première ligne sera coupé.
Je recommande de dépasser de plusieurs pixels au moins, donc si vous utilisez, -pointsize 64
vous devez associer cela à quelque chose comme -annotate +15+80
. (Il n'y a aucune raison d'augmenter le décalage horizontal avec des tailles de police plus grandes, il n'a aucun rapport avec les dimensions du texte.)
Devoir deviner les dimensions nécessaires de l'image de sortie peut également être fastidieux. Je choisis généralement des valeurs excessives, puis profite d'ImageMagick -trim
et -border
de recadrer automatiquement le résultat. La commande suivante:
convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
s'affichera dans une zone de 1 000 x 2 000, puis coupera l'espace blanc en excès, à l'exception d'une bordure de 10 pixels tout autour du texte. Le tout +repage
à la fin empêche la création du PNG de sortie avec un décalage d'image, ce qui entraînerait sinon GIMP à ouvrir une boîte de dialogue lors du chargement lui demandant s'il doit appliquer le décalage.
(Évidemment, 1000x2000 est excessif pour les petits fichiers texte, et pour les plus longs, au moins la dimension verticale doit être augmentée. Cependant, il est plus simple de surestimer, car le seul coût convert
consomme un peu plus de CPU et de mémoire lors du traitement.)
Entrée de prétraitement
Si votre fichier texte n'est pas déjà formaté comme vous le souhaitez pour le rendre (par exemple, s'il utilise de très longues lignes), vous devrez peut-être le reformater avant de le remettre convert
. ImageMagick n'encapsulera pas le texte, donc chaque ligne de texte s'étendra sur toute sa longueur horizontalement. Heureusement, il est possible d'exécuter le fichier via n'importe quel formateur de ligne de commande que vous souhaitez, puis de diriger le texte traité au convert
lieu de le lire directement à partir du fichier:
fmt < ascii.txt | convert -size 1000x2000 xc:white -font "DejaVu-Sans-Condensed" \
-pointsize 24 -fill black -annotate +15+30 "@-" -trim -bordercolor "#FFF" \
-border 10 +repage image.png
Cela rendra le contenu de ascii.txt
DejaVu Sans Condensed en 24 points, après avoir été traité par la fmt
commande, qui, dans son mode de fonctionnement par défaut, reformatera son entrée par habillage de mots sur une largeur de 75 colonnes. (Sauf s'il existe de longues chaînes continues de plus de 75 caractères, comme les URL, auquel cas elles s'étendent.)
Une fois fmt
le texte reformaté, il sera transmis à convert
qui rendra ensuite la fmt
sortie canalisée , comme s'il lisait directement le fichier. (La spécification d'un nom de fichier -
est un raccourci de shell UNIX assez courant pour "lire à partir de l'entrée standard, au lieu de n'importe quel fichier de disque nommé", et les outils ImageMagick suivent cette convention.)