Suite

Fonction Python FindLabel pour l'expression d'étiquette avec police de formatage ?


j'avais ça à l'origineRechercherÉtiquettefonction (qui fonctionne)…

def FindLabel ( [NAME], [Count_] ): if [Count_] != None: return [NAME] +'
' + "Well Log Count: " + [Count_]

Je voulais formater la police de la deuxième ligne uniquement, après ' ', en utilisant des balises de formatage. C'est ce que j'ai essayé et ça n'a pas marché...

def FindLabel ( [NAME], [Count_] ): if [Count_] != None: return"[NAME] +'
' + "" & " Nombre de journaux de puits : " + [Count_] & "

J'ai aussi essayé de définir une variable, et cela n'a pas fonctionné non plus…

def FindLabel ( [NAME], [Count_] ): myCount = "" & " Nombre de journaux de puits : " + [Count_] & " if [Count_] != None : return"[NAME] +'
' + myCount

Des pensées?


Il s'agit de python, et dans vos exemples, vous utilisez l'esperluette (&) pour concaténer votre chaîne. Vous ne le faites pas dans l'exemple non formaté qui fonctionne. Utilisez le signe plus - + - à la place. L'esperluette est utilisé dans VBScript.


Matplotlib : comment empêcher les étiquettes de l'axe des x de se chevaucher

Je génère un graphique à barres avec matplotlib. Tout fonctionne bien mais je ne vois pas comment empêcher les étiquettes de l'axe des x de se chevaucher. Voici un exemple :

Voici un exemple de SQL pour une base de données postgres 9.1 :

Et voici mon script python :

Existe-t-il un moyen d'empêcher les étiquettes de se chevaucher ? Idéalement de manière automatique, car je ne peux pas prédire le nombre de barres.


Utilisez le style LaTeX. Par exemple : $^circ$ Text produirait °Text

Consultez la documentation matplotlib pour plus d'informations sur l'impression (en particulier l'expression mathématique).

Dans votre cas, le code doit être : plt.xlabel('Manufactured Ply Angle $^circ

2 réponses 2

Je n'ai pas trouvé la réponse parfaite à cela, mais j'ai trouvé une solution qui a été utile à mes propres fins.

Ajuster à la fois colWidth et la largeur du tableau peut réduire la largeur de la colonne rowLabel. Dans le code source, il y a en fait une variable qu'ils utilisent, rowLabelWidth, mais ils ne laissent pas l'utilisateur la définir. Quoi qu'il en soit, je vais d'abord réécrire votre code existant afin que vous puissiez voir où les modifications sont apportées. Voici l'original au format variable :

Voici le contenu du code source de rowLabelWidth, que nous utiliserons pour déterminer à quoi définir la largeur et la colWidth.

Il semble que vous ayez défini le graphique sur une largeur en axes ([0,2, 0,45, 0,7, 0,45]), sur 0,7, nous allons donc définir cela sur une variable, tb_width

Le rowLabelWidth est dimensionné automatiquement, ce qui ne nous aide pas vraiment. Mais si vous jouez avec les trois options suivantes pour colWidths, vous pouvez commencer à comprendre comment le faire fonctionner comme vous le souhaitez. Ajoutez des propriétés bbox pour indiquer précisément où la table doit être. Une chose importante à noter est qu'il semble que le rowLabelWidth ne soit pas inclus dans la largeur globale du tableau.

Pour vous assurer que les rowLabels tiennent juste sous le graphique sans dépasser à gauche, utilisez les coordonnées bbox. En utilisant le coin inférieur gauche du tableau comme point de référence, positionnez le tableau : bbox=[x_coordinate, y_coordinate, width, height]. Si le x_coordinate est défini pour tenir compte de votre tb_colWidth, il déplacera le tableau sur le montant exact nécessaire pour que le côté le plus à gauche de la colonne rowLabels soit directement sous le coin gauche du graphique ci-dessus.

Si cela fait maintenant ressortir la colonne la plus à droite sous le graphique, réduisez la largeur de la taille d'une colonne :

Vous ne devriez pas avoir à faire votre boucle de cellule de tableau finale pour ajuster les largeurs de cellule, mais à la place, vous pouvez contrôler cela à l'aide des outils ci-dessus.


Et pour revenir à la normale :

Cette page est une bonne référence pour l'impression en couleurs et en poids de police. Allez à la section qui dit "Définir le mode graphique :"

Et notez que cela ne fonctionnera pas sur tous les systèmes d'exploitation, mais vous n'avez besoin d'aucun module.

Vous pouvez utiliser termcolor pour cela :

simple-colors est un autre package avec une syntaxe similaire :

L'équivalent dans colorama peut être Style.BRIGHT .

Dans la programmation informatique directe, il n'y a rien de tel que "l'impression de texte en gras". Revenons un peu en arrière et comprenons que votre texte est une chaîne d'octets et que les octets ne sont que des faisceaux de bits. A l'ordinateur, voici votre texte "bonjour", en binaire.

Chacun ou zéro est un peu. Chaque huit bits est un octet. Chaque octet est, dans une chaîne comme celle de Python 2.x, une lettre/un chiffre/un élément de ponctuation (appelé un caractère). Alors par exemple :

L'ordinateur traduit ces bits en lettres, mais dans une chaîne traditionnelle (appelée chaîne ASCII), rien n'indique du texte en gras. Dans une chaîne Unicode, qui fonctionne un peu différemment, l'ordinateur peut prendre en charge les caractères des langues internationales, comme les caractères chinois, mais encore une fois, rien ne dit que certains textes sont en gras et d'autres non. Il n'y a pas non plus de police explicite, de taille de texte, etc.

Dans le cas de l'impression HTML, vous obtenez toujours une chaîne. Mais le programme informatique qui lit cette chaîne (un navigateur Web) est programmé pour interpréter le texte comme ceci est <b>bold</b> comme "ceci est audacieux" lorsqu'il convertit votre chaîne de lettres en pixels à l'écran. Si tout le texte était WYSIWYG, le besoin de HTML lui-même serait atténué - vous sélectionneriez simplement le texte dans votre éditeur et le mettrait en gras au lieu de taper le HTML.

D'autres programmes utilisent des systèmes différents - de nombreuses réponses expliquent un système complètement différent d'impression de texte en gras sur les terminaux. Je suis content que vous ayez découvert comment faire ce que vous voulez faire, mais à un moment donné, vous voudrez comprendre comment fonctionnent les chaînes et la mémoire.


pywhois est un module Python permettant de récupérer les informations WHOIS des domaines. pywhois fonctionne avec Python 2.4+ et aucune dépendance externe [Source]

Dans ce script, j'utilise 8 réponses possibles, mais n'hésitez pas à en ajouter d'autres à votre guise. Il y a 20 réponses à l'intérieur de la Magic 8 Ball, et vous pouvez toutes les trouver ici.

Une première étape courante lorsque vous souhaitez utiliser des services Web consiste à voir s'ils disposent d'une API. Heureusement pour moi, Commandlinefu.com en fournit un et peut être trouvé ici

Dans un article précédent “OS.walk in Python“, j'ai décrit comment utiliser os.walk et montré quelques exemples sur la façon de l'utiliser dans des scripts. Dans cet article, je vais montrer comment utiliser la fonction du module os.walk() pour parcourir une arborescence de répertoires et le module fnmatch pour faire correspondre les noms de fichiers.

Cet article montrera comment vous pouvez créer un petit programme de scanner de ports facile à utiliser écrit en Python.

Sauvegardez toutes les bases de données MySQL, une dans chaque fichier avec un horodatage à la fin à l'aide de ConfigParser.

Pour faire une requête à l'API de recherche Web, nous devons importer les modules que nous
besoin.

Pxssh est basé sur pexpect. Sa classe étend pexpect.spawn pour se spécialiser dans la configuration des connexions SSH.

Ce script peut être utilisé pour analyser la date et l'heure.

Bitly permet aux utilisateurs de raccourcir, partager et suivre les liens (URL). C'est un moyen d'enregistrer, de partager et de découvrir des liens sur le Web.

Le module smtplib définit un objet de session client SMTP qui peut être utilisé pour envoyer
courrier à n'importe quelle machine Internet avec un démon d'écoute SMTP ou ESMTP. SMTP signifie Simple Mail Transfer Protocol.

Ce court script utilise la fonction os.listdir (qui appartient au module OS) pour rechercher dans un chemin donné (".") tous les fichiers qui se terminent par ".txt".

Speedtest.net est un site d'analyse de connexion où les utilisateurs peuvent tester leur internet
vitesse contre des centaines de serveurs géographiquement dispersés à travers le monde.

Dans cet article, je vais montrer comment utiliser la fonction du module os.walk() pour parcourir un
arborescence de répertoires et le module fnmatch pour faire correspondre les noms de fichiers.

Savoir analyser les objets JSON est utile lorsque vous souhaitez accéder à une API
à partir de divers services Web qui donnent la réponse en JSON.

Le temps d'un script encore, celui-ci va géolocaliser une adresse IP en fonction de la saisie de l'utilisateur. Pour ce script, nous utiliserons un tas de modules Python pour accomplir cela.

Ce script demandera à l'utilisateur son nom d'utilisateur, en utilisant la fonction raw_input. Ensuite, une liste d'utilisateurs autorisés est créée, nommée user1 et user2. L'instruction de contrôle vérifie si l'entrée de l'utilisateur correspond à celles qui figurent dans la liste des utilisateurs autorisés.

Ce script utilisera l'API Twitter pour rechercher des tweets.

Dans cet article, je vais vous montrer comment vous pouvez le faire sans cela en utilisant simplement
datetime.datetime.now() .

La deuxième partie de l'article concerne la classe timedelta, dans laquelle on peut voir
la différence entre deux instances de date, d'heure ou de date/heure en microsecondes
résolution.

Il s'agit d'un programme classique « lancez les dés ».

Ce petit script comptera le nombre de hits dans un fichier journal Apache/Nginx.

Ce script affichera toutes les entrées du fichier spécifié dans le fichier journal
variable.

Dans cet article, je vais vous montrer comment imprimer les dates et les heures en utilisant simplement datetime.datetime.now().

Ce petit programme étend le précédent jeu de devinettes dont j'ai parlé dans ce
: post “Jeu de devinettes”.

Ce script est un jeu de devinettes interactif, qui demandera à l'utilisateur de deviner un
nombre compris entre 1 et 99.

Vous pouvez utiliser des chaînes Python et des modules aléatoires pour générer des mots de passe.

OS.walk() génère les noms de fichiers dans une arborescence de répertoires en parcourant l'arborescence de haut en bas ou de bas en haut.

Ce script convertit la vitesse de KM/H en MPH, ce qui peut être pratique pour calculer
limites de vitesse lors de la conduite à l'étranger, en particulier pour les conducteurs britanniques et américains.

Dans ce script, nous allons utiliser le module re pour obtenir tous les liens de n'importe quel site Web.


Exemples ImageMagick v6 -- Traitement du texte à l'image

La création d'étiquettes de texte ou l'ajout de texte aux images est probablement l'une des opérations les plus basiques et les plus courantes pour lesquelles ImageMagick est utilisé. C'est aussi l'un des plus simples, mais avec des possibilités de résultats très fantaisistes. En tant que tel, c'est un bon endroit pour commencer notre exploration des capacités de la messagerie instantanée.

Opérateurs de texte dans ImageMagick

Ce que vous devez garder à l'esprit lorsque vous étudiez ces exemples, c'est qu'ImageMagick est principalement un convertisseur et un modificateur d'image. En tant que telles, chacune des méthodes fournies est de simples opérateurs de dessin de texte, tels que l'ajout d'étiquettes et de messages de copyright aux images. Voir Annotation d'images.

Tous les opérateurs de texte comprennent et utilisent également un ensemble de paramètres de traitement de texte standard tels que " -font ", " -pointsize " à utiliser. Également le paramètre de couleur " -fill " et pour le dessin de texte plus complexe les couleurs " -strokewidth ", " -stroke " et " -undercolor ". Dans les cas où vous créez réellement une nouvelle image, telle qu'une étiquette et des légendes, le paramètre de couleur " -background " est également utilisé.

Et enfin les nouveaux modificateurs " -kerning " et " -interword-spacing ".

Ce qu'ImageMagick n'est pas, c'est un traitement de texte et de documents entièrement formaté. Si vous voulez un traitement de texte lourd, vous feriez mieux d'utiliser un traitement de texte interactif complet, ou un formateur de texte par lots comme " TeX " (ou l'une de ses variantes (voir Un système de traitement de texte complet ci-dessous). La sortie de ces programmes ( généralement au format postscript) peut ensuite être converti en une image et ensuite modifié par ImageMagick, c'est-à-dire utiliser le bon outil pour le bon travail.

Cela dit, une gestion des polices mixtes peut être effectuée. Pour un point de départ, consultez Création de lignes de styles de police mixtes, près du bas de cette page.

Voyons maintenant les méthodes de base pour convertir du texte en images. Plus tard dans la section suivante (Polices composées, nous verrons comment générer des effets de police intéressants.

Étiquette - Étiquette de texte simple

Étiquettes de base

Par exemple, voici une étiquette générée typique.

Ce qui précède est probablement l'utilisation la plus courante de label, avec une sélection de polices et " -pointsize " définissant les résultats. Mais c'est de loin le moyen le moins intéressant de générer des étiquettes de texte.

L'image ' label: ' générée aura également les métadonnées de la propriété de l'image ' label ' définies sur la même chaîne. Certains formats de fichiers, tels que MIFF et PNG, enregistrent cette propriété spécifique et peuvent être utilisés dans des programmes de traitement d'images ultérieurs. Pour un exemple d'utilisation des métadonnées 'label', voir Montage utilisant des métadonnées enregistrées pour des exemples.

Si vous spécifiez également un " -size " alors l'image d'étiquette générée sera créée à cette taille.

Vous pouvez également utiliser " -gravity " pour définir la position de l'étiquette dans cette plus grande boîte.

Bien sûr, si vous ne définissez pas de " -size " pour le label, aucun espace supplémentaire ne sera disponible dans le " label: " généré pour " -gravity " à utiliser, ce qui le rend plutôt inutile.

Le problème avec l'utilisation des DEUX " -size " et " -pointsize " ensemble est que le texte pourrait "dépasser" la taille d'image spécifiée.

Avant la version 6.5.2-4, IM ignorait complètement le paramètre " -pointsize " si un paramètre " -size " était également fourni. Cela provoque le redimensionnement automatique du texte dans les images ci-dessus en fonction de la gestion du "meilleur ajustement" (voir la prochaine série d'exemples).

Meilleur ajustement à l'image

Comme vous pouvez le voir en définissant un paramètre " -size ", vous pourriez vous retrouver avec un espace supplémentaire à droite ou en dessous de l'image.

Lorsque IM crée une étiquette « bestfit », la taille en points réelle qu'il a utilisée est également enregistrée dans la propriété d'image « label:pointsize », vous permettant d'utiliser ces informations plus tard. Cela a été ajouté à IM v6.6.2-7, lors de la discussion sur le forum Pointsize Reporting

Vous pouvez toujours ajuster la position de l'étiquette dans cet espace supplémentaire en ajustant le paramètre " -gravity ".

Bien sûr, si vous ne définissez pas de " -size " pour le label, aucun espace supplémentaire ne sera disponible dans le " label: " généré pour " -gravity " à utiliser, donc cela n'a de sens que lorsque vous demandez que l'image soit une taille spécifique.

Maintenant pour les meilleures nouvelles. Si le paramètre " -size " que vous donnez ne contient que la largeur ou la hauteur de l'étiquette, la police sera ajustée pour s'adapter au mieux à cette dimension donnée. L'autre dimension non spécifiée sera alors ajustée automatiquement pour s'adapter à ce texte !

Fondamentalement, cela signifie que le " label : " ci-dessus aura toujours une largeur de 160 pixels, avec la plus grande taille de police pour cette largeur. La hauteur de l'étiquette sera alors ajustée en conséquence.

La même chose sera faite si la hauteur est spécifiée mais pas la largeur.

Cette étiquette mesure 40 pixels de haut, la taille en points non définie du texte a été ajustée pour s'adapter à cette hauteur, puis la largeur non définie a été définie pour s'adapter au texte dessiné. Exactement comme on peut s'y attendre.

Bien sûr, dans ce cas, il y aura à nouveau peu ou pas d'espace supplémentaire pour un paramètre " -gravity " avec lequel jouer.

Étiquettes sur plusieurs lignes

Comme vous pouvez le voir, " label: " comprend l'utilisation de ' ' comme représentant des nouvelles lignes. Cela signifie que vous devrez peut-être prétraiter votre texte d'entrée pour vous assurer que tous les caractères spéciaux sont échappés lorsque vous placez les données sur la ligne de commande. Voir Caractères d'échappement spéciaux dans les arguments de texte ci-dessous pour plus de détails.

Comme " -gravity " affecte également la génération " label: " (à partir de la version IM 6.2.6), vous pouvez l'utiliser pour "justifier" les labels multilignes.

Une caractéristique importante de la messagerie instantanée est qu'il peut lire les données de texte à utiliser à partir d'un fichier. Cela se fait en préfixant le nom de fichier avec un caractère 'at' ' @ ', et en l'utilisant comme argument de chaîne.

Par exemple, nous créons ici une étiquette à partir du fichier 'message du jour' de mes postes de travail.

Vous pouvez également lire le texte d'une étiquette à partir du pipeline d'entrée standard. Par exemple ici, je convertis la sortie d'un générateur de devis en une étiquette multiligne.

Notez que le nom de fichier que j'ai utilisé n'était qu'un caractère « - ». Cela signifie que le fichier doit être lu à partir de l'entrée standard. N'oubliez pas que vous pouvez utiliser le ' @ filename ' pour lire TOUS les arguments de chaîne de ligne de commande dans IM. Cela inclut toutes les autres méthodes de saisie de texte indiquées ci-dessous. Cependant, il ne peut être utilisé que pour remplacer l'ensemble de l'argument de chaîne, pas une partie d'un argument de chaîne.

Notez également que dans les exemples ci-dessus, une ligne vierge supplémentaire a été ajoutée à l'image de l'étiquette. Cette ligne vide est causée par une nouvelle ligne finale dans le fichier texte d'entrée. À moins que vous ne supprimiez d'une manière ou d'une autre la nouvelle ligne finale du fichier d'entrée (voir la légende : exemple ci-dessous pour la méthode permettant de résoudre ce problème), « label : » aura toujours cette ligne vide dans les fichiers texte d'entrée.

La plupart des anciennes versions d'IM (avant la v6.2.5) ne gèrent pas plusieurs étiquettes de ligne. Dans ces versions, les lignes auraient été jointes pour former une seule ligne très très longue.

Etiquettes verticales

Notez que la commande " sed " ajoute un caractère '@' après chaque caractère, sauf à la fin de la chaîne. Le " tr " remplace alors les caractères '@' par des sauts de ligne. Il suppose également que le texte saisi ne se termine pas par une nouvelle ligne, ce qui entraînerait l'ajout d'un espace vide supplémentaire au bas de l'image résultante.

Les utilisateurs exécutant Linux, et utilisant donc la version GNU de la commande " sed " peuvent supprimer le " tr ", et remplacer le ' @ ' par ' ' dans la commande sed, afin qu'elle insère directement les nouvelles lignes entre chaque caractère.

Voir aussi l'attribut spécial Inter-Line Spacing qui peut être utilisé pour ajuster l'espace entre les caractères.

Légende - Étiquette enveloppée de mot

Le paramètre " -size " n'est cependant pas facultatif et doit au moins spécifier une largeur maximale en pixels.

Par exemple, voici une légende d'une longue ligne qui ne rentre pas dans la largeur spécifiée.

L'image ' caption: ' générée aura également les métadonnées de propriété d'image " caption " 'définies' sur la même chaîne, vous permettant de réutiliser ces informations plus tard. Tous les formats de fichiers image courants enregistreront ces informations avec l'image. Voir Montage utilisant des métadonnées enregistrées pour des exemples.

Par défaut, le texte est entièrement justifié à gauche, cependant à partir de la version IM 6.2.0, " caption: " respecte " -gravity " à des fins de justification du texte.

Si vous fournissez une hauteur ainsi qu'une largeur au paramètre " -size ", la hauteur de l'image sera également définie sur cette hauteur. Vous pouvez alors également utiliser le paramètre " -gravity ", pour positionner le texte verticalement.

Veuillez noter cependant que si le texte ne rentre pas (dans le sens de la hauteur) dans le " -size " que vous avez spécifié avec le " -pointsize " donné, alors le texte débordera de la boîte. Le paramètre " -gravity " actuel déterminera naturellement quelle partie du texte est coupée.

Par exemple c'est exactement le même que l'exemple précédent, mais avec une image " -size " trop petite pour le résultat.

Légende la mieux adaptée

Par exemple, ici je demande à ImageMagick de remplir une zone assez large.

Notez que la SEULE différence entre les deux derniers exemples est le " -size " de l'image générée. IM a adapté le texte et l'habillage des mots afin d'essayer de remplir au mieux la taille d'image spécifiée.

Ceci est extrêmement utile pour insérer un morceau de texte inconnu dans un espace donné, sans qu'il ne dépasse les limites de la zone. Cependant, en interne, cela équivaut à exécuter la légende plusieurs fois, car IM recherche la bonne taille de point à utiliser pour remplir au mieux l'espace donné. En d'autres termes, cela peut souvent être 10 fois plus lent que si vous aviez fourni un " -pointsize " spécifique à utiliser.

Légendes avec paragraphes

Vous pouvez lire le texte à tirer d'un fichier, ou d'une entrée standard (d'une commande de pipeline précédente), en utilisant le préfixe de nom de fichier ' @ ', tout comme nous le pouvons avec " label : ".

Comme vous pouvez le voir, les nouvelles lignes dans le texte d'entrée (à partir de la version IM v6.2.5) seront traitées comme des séparateurs de paragraphe. Cela inclut toutes les nouvelles lignes finales dans le fichier d'entrée. Bien sûr, " label: " n'enveloppera pas les lignes, mais les conservera.

Si vous voulez vraiment qu'un fichier soit traité comme un seul paragraphe, vous devrez alors remplacer les caractères de nouvelle ligne par un espace, de sorte que votre texte soit sur une seule ligne. Par exemple, ici nous prenons le même texte, mais remplaçons les sauts de ligne par des espaces, puis remplaçons tous les espaces multiples entre les mots, par un seul espace.

Comme vous pouvez le voir, cela fonctionne beaucoup mieux.

Cependant, ce que vous voulez souvent, c'est traiter une ligne vide comme un saut de paragraphe. Cela signifie que vous devez supprimer toutes les nouvelles lignes, à l'exception de celles impliquées avec des lignes vides. Voici une commande spéciale " sed " pour convertir ce texte dans le format requis par " caption: ". Dans ce cas, le texte est la première page de la page de manuel " convert ".

Il n'y a pas d'option de texte « justifiée » pour la légende. Mais le pango: text formateur (utilisant une bibliothèque externe), a cette fonctionnalité, et bien plus encore.

Attributs de texte

Depuis IM v6.3.2, vous pouvez également utiliser le " -stroke ", " -strokewidth " et " -undercolor ". " étiquette : " ou " légende : ". Par exemple, ici, j'utilise de nombreux paramètres différents pour contrôler les attributs du rendu de l'image texte de la messagerie instantanée.

Pour plus de détails sur ces paramètres, voir Undercolor Box ci-dessous et Stroke, StrokeWidth dans la section de dessin.

À l'heure actuelle, vous ne pouvez pas utiliser d'images de tuilage définies à l'aide de « -tile », « -fill », « -background » et « -origin », avec « label : » ou « légende : ». Seules les couleurs unies peuvent être utilisées. Tenter de le faire produira simplement une couleur (noire) indéfinie.

Taille en points, densité et taille de police réelle

D'autre part, les images sont imprimées à une résolution spécifique (spécifiée comme « points par pouce » (ppp) ou pixels par pouce (ppp)). En tant que telle, la résolution des images affecte la façon dont les autres programmes dimensionneront une image sur un support spécifique. EG : Cela affecte la taille physique des images dans le monde réel.

La résolution (densité ou dpi) d'une image n'a aucun rapport avec la taille en pixels d'une image et la quantité d'espace qu'une image prend en mémoire ou sur le disque. Il est également, en général, sans rapport avec la plupart des opérations d'image IM. En tant que tel, pour ImageMagick, la résolution n'est qu'un ensemble de nombres stockés avec l'image et est normalement ignorée. Le seul moment où la résolution ou la densité d'une image devient pertinente est pour les polices et pour la conversion de formats vectoriels tels que postscript, pdf, MWF, vers les formats d'image raster gérés par IM.

Le paramètre " -density " indique à IM le nombre de pixels (points) par pouce (ppp) présents sur le périphérique de sortie, qu'il peut ensuite utiliser pour ajuster la génération d'images et les tailles de police.

Par exemple, IM fonctionne par défaut avec un paramètre " -density " de 72 ppi, qui est un paramètre typique pour afficher des images sur un moniteur ou une page Web. Comme la taille d'une police est spécifiée en "points" (en utilisant " -pointsize " et par définition 1 point est 1/72 pouces, alors une police de 72 points devrait produire un texte dont la taille est d'environ 1 pouce de haut.

Cependant, la plupart des écrans modernes ont une meilleure résolution que celle-ci, généralement entre 90 et 120 pixels par pouce (ppi). En tant que tel.

Doit produire une étiquette de 1 pouce de haut sur un écran de 90 ppp. C'est sur mon écran ! Vous pouvez mesurer la hauteur de ces images sur votre écran, pour vérifier la résolution de vos écrans.

Comme le nombre de pixels par pouce est plus grand, la police dessinée est également naturellement plus grande en termes de nombre de pixels dans l'image, produisant ainsi une image plus grande. Différents programmes d'images ont souvent une densité par défaut différente, ce qui peut entraîner un affichage différent des polices lorsqu'elles sont dessinées par différents programmes, même avec la même taille de point.

Notez que " -pointsize " signifie en fait la séparation des lignes d'une police (en fait la hauteur de sa zone de dessin), et ne fait PAS référence à la hauteur réelle des lettres dessinées ! En tant que telle, une police peut apparaître plus grande ou plus petite qu'une autre police, avec la même taille de points et la même densité. Seul l'interligne des polices sera en fait le même, tout le reste dépend de la police et du concepteur de la police.

Ainsi, avec une " -densité " par défaut de 72 dpi (auquel 1 point = 1 pixel), une police de 12 points devrait avoir une séparation de 12 pixels entre les lignes de base de deux lignes de texte.

Notez que la hauteur d'une image " label: " générée est basée sur la zone de dessin des images ou le cadre de délimitation, qui est souvent l'espacement des lignes et la taille des points des polices. Ce n'est pas toujours le cas, car le simple fait d'ajouter des lignes de texte verticalement est en fait une gestion incorrecte des polices !

Certaines polices peuvent même s'étendre bien au-delà des limites normales de séparation des lignes, s'étendant bien au-dessus ou plus généralement en dessous de l'interligne. Cela est particulièrement vrai pour les polices manuscrites.

L'apparence d'une police est également affectée par les polices " -pointsize " et " -density ".

Le fait de doubler la taille d'une police (" -pointsize 24 ") produira également une police ayant à peu près la même taille qu'une police avec une densité ou une résolution doublée. Cependant, étant donné qu'une police est conçue pour avoir une apparence particulière, l'épaisseur des lignes d'une police peut ne pas beaucoup changer à une taille de point plus grande. C'est la plus grande taille de police est légèrement différente.

Mais si vous doublez simplement la densité (" -density 144 "), une police de 12 points sera dessinée avec ses dimensions doublées, devrait toujours ressembler à la police d'origine de 12 points, juste dessinée à une plus grande échelle avec un meilleur lissage des bords.

Cependant, à de très faibles résolutions, les limitations de taille physique des pixels peuvent également affecter l'apparence d'une police. Cela signifie que les lignes fines peuvent être épaissies à des densités inférieures en raison de la grande taille de pixel définie par la densité. La relation entre la "densité" et la "taille en points" est un problème très complexe, que seul un graphiste de polices professionnel peut comprendre pleinement et concevoir ses polices pour qu'elles soient correctement gérées.

FUTURE Exemple : différence entre une police de même taille de 'pixel', mais une densité et une taille de point différentes.

Fondamentalement, augmenter l'un de ces facteurs tout en diminuant l'autre du même montant peut ne pas produire le même résultat. En particulier en ce qui concerne l'épaisseur du trait et le « style » général de la police. Vous feriez mieux d'ajuster le bon facteur pour ce que vous faites. Utilisez " -density " lors de la mise à l'échelle d'une police pour un périphérique de sortie, ou un redimensionnement ultérieur de la police, et utilisez " -pointsize " pour les changements de taille de police normaux.

Si vous souhaitez en savoir plus sur les polices, consultez le document TrueType Fundamentals (PDF), que j'ai trouvé très intéressant.

Libellé des limites de l'image

Par exemple voici deux lettres majuscules dans une police 'LokiCola' rappelant une certaine boisson non alcoolisée célèbre.

Comme vous pouvez le voir, IM parvient à contenir cette police dans une étiquette sans couper le leader des polices ou les graphiques de fin.

Avant IM v6.3.2, " label: " aurait coupé l'entrée 'H' et des parties de la queue des deux caractères, dans l'exemple ci-dessus.

La raison pour laquelle ce problème existait est que les « glyphes » des polices ou la description des caractères dessinent en dehors des limites définies par les polices pour des lettres spécifiques, leur permettant de se chevaucher (généralement au-dessus ou en dessous) des autres caractères de la police.

Il s'agit d'un problème avec la façon dont la police elle-même est conçue et définie, et ce n'était pas la faute d'IM, bien qu'IM gère maintenant ces situations étranges dans le meilleur intérêt des utilisateurs. Dans d'autres situations, cela pourrait toujours être un problème, et qui ne peut pas être résolu simplement en raison d'interactions de texte multilignes. Pour plus d'informations, consultez les exemples de débordement de la zone de délimitation ci-dessous, pour une description plus précise.

Texte au format Unicode ou UTF8

Maintenant, si vous pouvez taper des caractères unicode dans des commandes ou des scripts, vous pouvez les utiliser directement.

Cependant, peu de personnes ont des claviers ou des éditeurs correctement configurés pour gérer la saisie de caractères Unicode. Même si vous ne pouvez pas saisir directement les caractères Unicode, une solution simple consiste simplement à « copier-coller » les caractères souhaités à partir d'un fichier texte UTF-8 ou d'une page Web existant. Je fais!

Si le texte UTF-8 que vous souhaitez dessiner a déjà été généré, vous pouvez le lire directement à partir d'un fichier en utilisant ' @filename '. Par exemple ici, je crée une étiquette chinoise à partir d'un fichier texte chinois encodé en UTF-8 (sans nouvelle ligne finale dans le fichier). env LC_CTYPE=en_AU.utf8 printf 'u6d4bu8bd5u7528u7684u6c49u5b57' -->

La police utilisée dans l'exemple ci-dessus est une police spéciale, avec l'ensemble complet des glyphes chinois définis, comme les polices fedora linux « SimSun » (ou dans le fichier de police « gkai00mp.ttf »), « ZenKaiUni » (dans le fichier " ukai.ttf ") ou " ShanHeiSunUni " (dans l'un des fichiers " uming.ttf " ou " zysong.ttf " ou " bsmi00lp.ttf ").

Notez que la police Windows ' Mincho ' (utilisée dans un exemple ultérieur) définit également de nombreux glyphes Chienese mais de manière incomplète. Si vous l'utilisez avec ce qui précède, vous obtiendrez des points d'interrogation pour les glyphes non définis.

Nous pouvons également générer des chaînes UTF-8 à partir de codes de caractères Unicode en utilisant le programme 'GNU' " printf " (sur les systèmes Linux) pour convertir les nombres Unicode en la chaîne encodée UTF-8 spécifique, dans ce cas les guillemets d'ouverture et de fermeture correctement composés (encore une fois pas de nouvelle ligne finale dans l'entrée UTF-8).

Ici, par exemple, je génère le texte UTF-8 à l'aide de codes de caractères Unicode et je l'alimente à l'aide d'un pipeline de commandes (lu à partir de 'stdin' en utilisant " @- "), plutôt qu'à partir d'un fichier réel.

Sur d'autres systèmes (comme Mac OSX et Windows), vous pouvez utiliser le perl " printf " pour sortir une chaîne de caractères codée UTF-8 à partir de codes de caractères Unicode.

Pour plus d'informations et pour rechercher les codes de caractères Unicode pour différentes langues et symboles, voir Tableaux des codes de caractères Unicode.

Non seulement les caractères Unicode peuvent contenir des caractères internationaux, mais avec la bonne police, vous pouvez également utiliser des ensembles de « symboles » spéciaux qu'il définit. La plus connue est la police de symboles 'DingBats'. Cette police est devenue si courante qu'elle fait désormais partie du jeu de polices Unicode standard.

Par exemple, ici, j'extrait les 24 premiers caractères de la zone de symbole Unicode 'DingBats' à l'aide d'un script shell spécial "graphics_utf" que j'ai écrit pour générer un 'bloc' de caractères Unicode sous forme de texte UTF-8.

Les points d'interrogation ci-dessus sont des caractères spécifiques qui n'ont été définis ni par unicode, ni dans la police 'Mincho' de Windows. Plus précisément, le symbole qui faisait partie de la police d'origine « dingbat » est présent en Unicode, mais en utilisant un autre code de caractère Unicode que le code dingbat attendu. Voir Dingbats Unicode Specification Chart pour plus de détails et sa référence au caractère Unicode correct à utiliser pour les caractères dingbat «manquants».

Plutôt qu'un point d'interrogation, de nombreuses polices imprimeraient simplement une case ou un caractère vide pour ces caractères indéfinis. Si vous voyez trop de ces caractères ou des caractères manquants dans votre sortie, vous devriez probablement utiliser une police différente.

D'autres jeux de symboles également disponibles dans le cadre de l'énorme police de caractères Unicode incluent : les symboles runiques Tolkan, les symboles mathématiques, les chiffres romains, les flèches, le braile et les symboles techniques. C'est un vaste ensemble à explorer, et le script shell "graphics_utf" peut vous aider à l'explorer.

Voici un autre exemple de caractères Unicode que la police Microsoft 'Mincho' peut rendre. Dans ce cas à partir de la section "Symboles divers".

L'utilisation d'unicode dans les scripts DOS est plus difficile que sous UNIX et LINUX. Des notes spéciales sur l'utilisation d'Unicode à partir de cet environnement ont été fournies par Wolfgang Hugemann, dans Windows Character Encoding.

Polices de symboles

Les symboles de police 'DingBat' ont commencé de cette manière, mais comme mentionné ci-dessus, ils font désormais partie du jeu de caractères Unicode.

Par exemple, un symbole que j'aime utiliser provient de la police "WebDings". Il s'agit d'un symbole de « coeur courbé » plutôt agréable, qui remplace le caractère « Y » normal dans cette définition de polices.

La chose importante à retenir est que toutes les polices TrueType sont en fait un type spécial de format d'image vectorielle. Avec plusieurs images (une pour chaque caractère) dans la police. Comme il s'agit d'images vectorielles, cela signifie que la police doit vous permettre de "dessiner" un caractère, une forme ou un symbole à n'importe quelle taille (échelle), en utilisant les commandes fournies par " -size ", " -pointsize " et " - densité ".

Comme vous pouvez le voir ci-dessus, le « cœur courbé » peut être « rendu » à peu près n'importe quelle taille que je désire.

Certaines polices sont très spécialisées. Par exemple, vous pouvez obtenir un fichier de police d'IDAutomation appelé " IDAutomationHC39M.ttf " qui peut être utilisé pour générer des codes à barres. Par exemple.

Voici quelques autres symboles intéressants que j'ai trouvés dans diverses polices de symboles que j'ai collectées pour une raison ou une autre.

Ceci n'est qu'un petit échantillon de ce qui est disponible. D'énormes bibliothèques d'à peu près tous les symboles, formes ou images imaginables sont disponibles sur le WWW pour que vous puissiez les parcourir et les télécharger.

N'oubliez pas que chaque caractère dessiné comporte deux parties distinctes qui peuvent être dessinées : la zone « remplie » (que j'ai montrée ci-dessus) et le « trait » ou contour, qui peut être très différent de la zone remplie. Chacune de ces zones peut être dessinée séparément ou dans des couleurs différentes, il peut donc être judicieux d'examiner de plus près un symbole ou une forme prometteuse, de plusieurs manières. Vous pouvez obtenir un résultat très surprenant. Voir Polices composées, Stroke pour quelques exemples.

De nombreux créateurs de polices de symboles génèrent les formes à l'aide d'un simple scanner et d'un convertisseur bitmap en vecteur, sans aucune conception ou nettoyage approprié de l'image ou de la forme. La prudence est recommandée lors de l'examen de ces polices « numérisées ».

La dernière police illustrée ci-dessus est un exemple de police « numérisée », ce qui lui donne une mauvaise qualité « pointillée » par rapport aux autres polices mieux conçues.

Crénage inter-caractères

Notez que la valeur de crénage réelle peut être une valeur à virgule flottante, voire une valeur négative.

Pour un autre exemple d'utilisation d'une valeur " -kerning " négative, consultez l'exemple de police composée jointe.

Espacement entre les mots

Notez comment vous pouvez non seulement augmenter la taille d'un espace entre les mots, mais également diminuer la taille par défaut.

Notez cependant que les espaces entraîneront le réalignement des mots aux limites des pixels (contrairement au crénage inter-caractères ci-dessus), de sorte que la sortie d'une étiquette avec des espaces mis à zéro sera toujours différente d'une étiquette qui ne contient aucun espace du tout .

Le crénage entre les caractères et l'espacement entre les mots affecteront également les résultats de la capacité de la messagerie instantanée à adapter automatiquement une chaîne de texte à une image de taille spécifique.

Ce qui se passe, c'est qu'en définissant le " -interword-spacing ", la taille des caractères 'espace' ne change plus avec le reste de la taille du texte. Ainsi, comme IM essaie de déterminer le meilleur " -pointsize ", la quantité d'espace entre chaque mot est fixe, et ne joue donc aucun rôle dans l'ajustement du texte dans la largeur fixe donnée. En conséquence, plus le " -interword-spacing " est grand, plus la taille de la police est petite qui est nécessaire pour ajuster la ligne de texte dans la même largeur d'image spécifiée.

Une valeur négative peut être utilisée, et peut en fait faire se chevaucher des mots, ou produire des effets inhabituels en utilisant des caractères et des polices spécifiques. Mais rendez-le trop négatif et des comportements indéfinis peuvent s'infiltrer. La prudence est de mise si vous essayez ceci.

Bien que ce qui précède ne soit pas un exemple de justification de texte (bien que cela y ressemble), vous pouvez utiliser ces options comme point de départ pour fournir une justification de texte appropriée.

Si vous avez vraiment besoin de ce niveau de formatage et de justification du texte, vous feriez peut-être mieux d'examiner d'autres méthodes de génération de texte pré-formaté ou Postscript, telles que le logiciel "TeX" ou "LaTeX" basé sur la ligne de commande. Mieux encore, vous pouvez utiliser SVG (version de la bibliothèque rsvg) ou Pango Markup Language (voir ci-dessous) pour générer du texte justifié.

Espacement interligne

Fondamentalement, il ajoutera ou soustraira ce nombre de pixels entre les lignes de texte individuelles. C'est-à-dire que vous pouvez l'utiliser pour développer ou écraser les lignes de texte individuelles.

Pour tirer le meilleur parti de ce paramètre, vous devez pouvoir calculer l'interligne normal pour une police spécifique. Il s'agit de la définition réelle de " -pointsize ", qui avec la résolution actuelle ou le paramètre " -density " définit l'interligne d'une police. Il ne définit pas réellement la hauteur ou l'épaisseur de ligne réelle des polices, bien qu'il affecte ces aspects d'une police particulière.

Donc, en prenant une "-densité" de '72' points par pouce, et sachant que par définition il y a 72 'points' par pouce. vous pouvez calculer qu'une police de 12 points aura un interligne de 12 pixels.

Avec ces informations, vous pouvez "doubler l'espacement" de vos lignes de texte de 12 points en utilisant un paramètre de " -interline-spacing 12 ". Cela ajoutera 12 pixels supplémentaires entre les lignes.

Bien sûr, comme on l'a vu précédemment pour la taille des intermots, l'ajout d'un nombre constant de pixels entre les éléments de texte aura tendance à réduire la taille du texte lorsque la gestion automatique de la taille des points est utilisée. C'est-à-dire qu'une image finale " -size " est fournie sans paramètre " -pointsize ".

L'utilisation d'un espacement interligne négatif peut également être utilisée comme une méthode approximative et prête de « grass » verticalement une ligne, simplement en répétant cette ligne et en soustrayant 1 pixel de plus que la séparation de la ligne de base.

Bien sûr, cela ne fonctionnera pas si vous voulez vraiment deux lignes, et pas seulement du texte en gras. Cela fonctionne également mieux avec une police de largeur fixe.

Caractères d'échappement spéciaux dans les arguments de texte

Il existe également un échappement spécial ' @ ' qui, s'il est utilisé au début d'une ligne, utilisera le reste de l'argument texte comme nom de fichier pour lire les données du fichier spécifié (ou STDIN dans ' - ' est utilisé).

Certains systèmes (comme ubuntu) désactivent l'utilisation du '@' s'échapper en utilisant la politique de sécurité. Tapez convert -list policy pour voir quelles stratégies et d'où elles sont définies sont présentes sur votre système.

Non seulement ces caractères d'échappement affectent " -format ", pour une utilisation par le " identifier " (ainsi que " -identify " et le " info: "), mais ils affectent également " label: ", et " caption: " text aux générateurs d'images, et contrôler les options de paramétrage des métadonnées d'image " -label ", " -comment ", " -caption ". Et enfin ils sont aussi utilisés par " -annotate ".

Alors que la barre oblique inverse ' ' est utilisée par la méthode " -draw " ' text ', les échappements en pourcentage ' % ' ne le sont pas car ils interfèrent avec la gestion des images SVG d'ImageMagick. C'est l'une des raisons pour lesquelles l'opérateur " -annotate " a été créé pour IM version 6.

L'autre point important concernant les caractères d'échappement est qu'ils sont utilisés pour les arguments de texte de ligne de commande. A aucun moment ils ne s'appliquent dans les données lues à partir d'un fichier texte (généralement lues en utilisant l'échappement ' @ ').

Cela signifie que vous n'avez pas à vous soucier de l'échappement des données de fichier texte, mais cela signifie également que vous devez traiter vous-même les données du fichier en dehors de la messagerie instantanée si vous devez insérer des informations dans le texte.

La protection du fichier texte d'entrée contre la manipulation d'échappement a été finalisée dans la version IM 6.3.3.

Par exemple, ici, j'ai défini et signalé des métadonnées d'images « étiquette » et « commentaire » en utilisant les deux méthodes pour définir ces informations à partir d'un fichier texte source. Le fichier " info.txt " contient la chaîne printf '@ %%wx%%h' > info.txt --> , (pas de retour à la ligne final).

Notez qu'IM n'a développé aucune des séquences de caractères d'échappement qu'il a lues à l'aide de l'échappement de lecture de fichier ' @ '.Ceci est important car cela signifie qu'à chaque fois que IM lit du texte dans un fichier, il ne traitera jamais les caractères spéciaux qui étaient présents dans ce fichier.

Malheureusement, cela inclut également toute nouvelle ligne finale qui peut être présente dans le fichier (ou le flux) en cours de lecture ! Cela peut entraîner une ligne « vierge » supplémentaire dans l'image résultante, lorsque le texte d'entrée a une nouvelle ligne à la fin (une pratique très courante). Par exemple.

Comme vous pouvez le voir, l'étiquette contenait non seulement la chaîne d'entrée, mais également une ligne vierge supplémentaire en raison du caractère de nouvelle ligne que la commande " echo " a ajouté à la fin.

Si vous ne voulez pas cette nouvelle ligne finale, vous devrez la supprimer vous-même. Cependant, cela pourrait être une question délicate, selon où et comment le texte est sourcé ou créé, et à partir de quelle API vous exécutez la messagerie instantanée.

Le meilleur moyen est d'essayer de ne pas générer cette nouvelle ligne finale pour commencer. Par exemple, utiliser un indicateur ' -n ' pour " echo ". Ou en utilisant quelque chose qui n'ajoute pas de nouvelles lignes supplémentaires, sauf si vous le demandez spécifiquement. Ou vous pouvez "junk" cette nouvelle ligne finale en utilisant un petit one-liner perl délicat.

Dans d'autres API, vous pouvez rechercher cette nouvelle ligne finale avant de fournir le texte à une commande IM via un "piped open".

L'option définie par l'utilisateur s'échappe

C'est un problème très difficile, et la solution actuelle (pour une seule image) est de créer une "option utilisateur" spéciale, qui est attachée à une image en cours de traitement. Ce 'réglage' peut ensuite être recherché par le " label : ", " caption : ", ou " -annotate ", en tant que séquence d'échappement de pourcentage, si nécessaire.

Par exemple, ici, je crée une toute nouvelle image d'étiquette en utilisant les informations de l'image de rose intégrée. Cette image source d'informations est ensuite supprimée, bien que je puisse tout aussi facilement ajouter la nouvelle étiquette à l'image d'origine.

Oui, ce qui précède est délicat, mais cela en raison de certaines limitations internes de la bibliothèque principale de messagerie instantanée qui sont impliquées. Voir Accéder aux données d'autres images pour plus de détails.

Échapper aux évasions

Avant IM version 6.3.2, vous ne pouviez pas utiliser une barre oblique inverse pour échapper à un ' @ ' initial pour désactiver la fonction 'lire à partir d'un fichier'. Dans ce cas, le seul moyen d'échapper à un ' @ ' initial était de le lire à partir d'un fichier. Ce n'était pas très pratique dans les API.

Voici un exemple similaire d'échappement des échappements pour " -annotate ".

Bien sûr, comme indiqué précédemment, la lecture du texte d'un fichier (en utilisant l'échappement ' @ '), sera toujours traitée comme un littéral, sans aucune signification particulière. Cela évite le besoin de tout pré-traitement du texte, faites juste attention aux nouvelles lignes finales.

En d'autres termes, lors de la lecture d'un fichier, vous n'avez pas à vous soucier d'échapper des éléments, mais vous pouvez simplement écrire exactement le texte que vous souhaitez que la messagerie instantanée utilise.

Échappements sur les anciennes versions de la messagerie instantanée

C'était particulièrement le cas en ce qui concerne le pourcentage d'échappements avec « étiquette : » et « légende : », qui était pour une période considérée comme « non sensible ».

Par exemple, si vous voyez un « %c » dans l'image d'étiquette suivante, cela dépend beaucoup de la version (au moins avant IM v6.3.3).

Si vous voyez un ' abde ' (pourcentage d'échappement appliqué) ou ' ab%cde ' (pourcentage non appliqué) dépend exactement de la version de MI que vous utilisez.

Cependant, ils sont revenus dans IM v6.3.2, en tant que nouveau ' %[fx. ], qui peut référencer n'importe quelle image, a rendu les échappements de pourcentage dans les générateurs de texte en image à nouveau utiles. Voir FX Expression Escapes.

Ce « ce qui est échappé » posait également problème en ce qui concerne le traitement des échappements de fichiers. Avant IM v6.3.3, ce qui suit aurait produit deux lignes, plutôt qu'une seule.

Comme les résultats de la gestion des échappements varient considérablement d'une version à l'autre, dans les IM antérieures à la v6.3.3, je recommande aux scripts de tester sa gestion d'échappement, de s'ajuster si cela est important pour le bon fonctionnement des programmes.

Si quelqu'un souhaite créer un test automatique pour les scripts de messagerie instantanée, merci de contribuer. Ou si vous trouvez un tel test, faites-le moi savoir.

Pango - Texte formaté de base

Voici un exemple simple sans utiliser de formatage spécial de pango.

Cependant, vous devez noter que certains des attributs de texte précédents ne fonctionneront pas avec pango, essentiellement en raison de ses exigences de formatage de texte. Par exemple, bien que vous puissiez définir une couleur " -background ", vous ne pouvez pas définir le remplissage par défaut, ou la sous-couleur, ni la police spécifique à utiliser. En effet, ces attributs sont sélectionnables via le langage de balisage Pango (voir ci-dessous).

Il est recommandé d'utiliser " -size " pour définir les limites de largeur et de hauteur de l'image de sortie, auxquelles pango ajustera automatiquement le mot (ou le caractère, pour le chinois) au texte d'entrée.

Et vous pouvez même demander à Pango de « justifier » correctement le texte en utilisant le Définir, « pango:justifier ».

Notez cependant que si le texte peut être justifié, les espaces et les sauts de ligne sont toujours pris en compte par le texte mis en forme.

Pango comprend également l'utilisation des TAB (contrairement à l'étiquette et à la légende).

Notez que bien que la commande " printf " ci-dessus puisse générer des caractères de tabulation, en utilisant l'échappement ' ', IM ne comprend pas l'utilisation d'un tel échappement. Il comprend cependant la séquence d'échappement ' ' dans les chaînes.

Cependant, la génération de colonnes à l'aide de TAB ne fonctionne pas très bien car vous ne pouvez pas facilement définir les "tab-stops" en dehors de l'API. En tant que tel, l'utilisation des tabulations de cette manière n'est pas recommandée, sauf pour l'indentation de ligne et de paragraphe.

Langage de balisage Pango

Le "Pango Markup" ressemble beaucoup au HTML, en ce sens que vous utilisez un ensemble de balises de balisage " <. > " cachées dans le texte, et qui sont utilisées pour contrôler la façon dont le texte doit être formaté.

La balise " <span . > " est la balise principale à utiliser dans le balisage pango. Il vous permet de contrôler la taille, la couleur et la position exactes du texte contenu. Par exemple..

Notez que la plupart des valeurs numériques sont multipliées par un facteur de 1024, car la valeur de " size="49152" " dans l'exemple ci-dessus signifie une taille de texte de 48 points. Tandis que l'élévation négative (" rise="-20480" ) signifie abaisser la position du texte de 20 points (ou pixels à 72 dpi).

Mais au lieu de spécifier une taille en points pour le texte, je peux également utiliser une étiquette de taille spéciale telle que " size="x-large" ". Voir le code source de l'exemple suivant.

Méfiez-vous des citations entre guillemets ci-dessus. Les guillemets dans les balises sont obligatoires. Cependant, les nouvelles lignes et l'espace supplémentaire dans les balises ne participeront pas à la mise en forme du texte. En tant que tel, masquer des nouvelles lignes supplémentaires dans des balises de balisage ou dans un commentaire de balisage peut être très utile. Voir à nouveau le texte source de l'exemple suivant.

Comme dernier exemple de la puissance du formatage pango, je l'utilise ici pour formater un fichier pré-préparé " pango_test.txt ". Il contient la plupart des balises de balisage pango courantes que vous êtes susceptible d'utiliser. Comparez ce fichier de balisage à l'image résultante ci-dessous.

Notes et problèmes de Pango

Cela semble être dû au fait que Pango est conçu pour générer des étiquettes de texte distinctes pour les applications. C'est-à-dire que les titres sont généralement générés séparément du corps principal du texte affiché.

Pango n'est pas censé être un moteur de formatage de page de texte à grande échelle.

Polices Pango peut changer les polices en cours de rendu. Il le fait déjà si facilement pour le texte en gras et en italique. Cependant, la spécification de la police provient de GTK et utilise donc un système différent de celui d'ImageMagick en général.

Vous pouvez en savoir plus sur les polices utilisant GTK, en exécutant le programme "gtk-demo", et en double-cliquant sur " Pickers " et le " Text Widget ".

Définit Il existe de nombreuses définitions spéciales qui peuvent être utilisées pour contrôler globalement divers aspects du formatage du texte pango. Ceux-ci sont actuellement répertoriés dans les pseudo formats de fichiers, bien que je ne les ai pas tous explorés moi-même.

Ce sont ceux que j'ai utilisés. -define pango:markup=false Désactive les balises du langage de balisage. Toutes les balises sont ensuite incluses dans la sortie. Aucune mise en forme pango dans le texte n'est possible. ceci est particulièrement utile pour le débogage, vous permettant de voir exactement ce que pango voit pour son entrée.

-define pango:justify=true Justifie le texte sur toute la largeur de la taille de l'image. C'est-à-dire ajouter un espacement intra-mot supplémentaire afin que les bords gauche et droit d'un bloc de texte s'alignent.

Plus d'informations sur Pango

Si vous faites quelque chose d'intéressant avec pango, merci de contribuer. Envoyez-moi un e-mail (adresse dans le pied de page), ou publiez-le sur le forum de discussion IM.

Sur les systèmes sur lesquels Pango est installé, vous pouvez également utiliser la commande " pango-view " pour générer des images au format Pango. Cependant, son paramètre par défaut de « densité » ou « dpi » est votre affichage (IM utilise 72 dpi par défaut) et, en tant que tel, peut varier d’un hôte à l’autre.

Texte - Pages de texte brut

En d'autres termes, son objectif est de convertir les fichiers texte préformatés plus volumineux en pages de la même manière que les imprimantes impriment du texte brut sur des morceaux de papier séparés.

Ne confondez pas le format d'entrée de fichier " text: " avec le format d'entrée similaire " txt: ". Ce dernier tentera d'abord de lire le fichier au format d'image 'IM pixel énumération'.

Cela ne signifie pas qu'un fichier texte brut avec un " .txt " échouera. En fait, un tel fichier sera probablement converti comme vous vous en doutez, car le format de fichier " txt: " reviendra automatiquement au format " text: " si une image énumérée n'est pas reconnue.

La gestion du texte de cette manière présentait cependant un certain nombre de problèmes. Tout d'abord, le texte est dessiné sur une grande toile, vous laissant avec le problème de supprimer l'espace inutilisé, si cet espace n'est pas souhaité. L'autre est que les lignes ne sont pas « enveloppées par mot », mais déborderont le canevas et seront tronquées si elles sont trop longues. Et enfin, pour les fichiers texte très longs, plusieurs pages (images) seront générées à moins que certaines précautions supplémentaires ne soient prises.

D'un autre côté, " text: " traitera à peu près n'importe quel fichier texte, sans modifier la taille finale de l'image produite, ni encapsuler de très longues lignes. Vous n'avez pas non plus besoin de pré-traiter et de caractères spéciaux comme vous le feriez si vous utilisiez le texte sur la ligne de commande. Enfin et plus important encore, si une police de largeur fixe (comme Courier) est utilisée, les fichiers avec des colonnes de données espacées auront toujours ces données dans des colonnes espacées.

Fondamentalement, " text: " convertira le fichier d'entrée 'TEL QUEL'.

Les données de texte d'entrée lues à partir du fichier sont essentiellement transmises directement à la bibliothèque de polices pour dessiner le texte UTF. En conséquence, certains caractères de contrôle peuvent être dessinés à l'aide de « glyphes » inhabituels. Cela inclut les caractères TAB et FORMFEED, qui, au moment de la rédaction, la bibliothèque 'freetype' se trompe.

Si cela vous pose problème, vous pouvez pré-traiter votre fichier texte à l'aide d'un programme de filtrage, tel que " développer ", pour convertir les caractères TAB en le nombre d'espaces approprié.

Lorsque vous dessinez du texte, une grande page de taille 'lettre' est créée (ou la taille ou le type de page spécifié avec un " -page " ) à la résolution actuelle (définie avec " -density "). Par défaut (à 72 dpi), il s'agira d'une taille de " 612 x 792 " pixels, ce qui, dans la plupart des cas, est très grand.

Par exemple voici une conversion directe du manuel formaté en texte brut pour la commande " convertir ", en une image (elle est grande donc pour la voir sélectionnez l'image 'page' à droite pour la voir).

Le manuel ci-dessus pour la conversion d'images génère cependant plusieurs pages (images), j'ai donc supprimé la deuxième et les suivantes pour ne me laisser que la première page, au lieu d'une animation GIF de toutes les pages.

J'aurais également pu ajouter un modificateur de lecture, le nom de fichier d'entrée ' [0] ', tel que " text:-'[0]' ", pour dire à IM de lire uniquement la première image générée. Bien qu'à ce stade, toute la sélection de pages soit toujours gérée en générant toutes les pages et en supprimant les pages indésirables.

J'ai volontairement utilisé la police « à largeur fixe » « CourierNew » dans ce qui précède afin de préserver le formatage des caractères espacés qui est présent dans la page imprimée.

Notez comment cette sortie varie de celle de la légende : ci-dessus. L'aspect général de cette image peut également être amélioré en utilisant les mêmes techniques que celles décrites dans la section Postscript suivante.

Si vous voulez juste savoir quelle est la taille d'une page "A5" à 100 dpi, alors cette commande génère une seule page vierge, de cette taille et renvoie sa taille en pixels. Le nom de fichier, " /dev/null ", est un fichier UNIX spécial qui est toujours vide.

Découper des pages de texte

Cela semble complexe ? Ce n'est pas vraiment le cas, par exemple.

Dans l'exemple ci-dessus, " -trim " est utilisé pour supprimer la grande quantité d'espace blanc supplémentaire dans l'image de la page " text: ". Cependant, cela supprimera également tous les espaces de début devant une ligne !

Il existe cependant une technique intéressante qui vous permettra de " -couper " l'image à la taille du texte réel dessiné sur la page, y compris les espaces de début et de fin dans l'entrée. Cela utilise un paramètre spécial " -undercolor " (examiné en détail plus loin).

L'espace supplémentaire en bas du texte est le résultat du dernier caractère « nouvelle ligne » dans l'entrée de texte, créant une ligne vide supplémentaire dans l'image. Mais comme vous pouvez le voir, les espaces de début et de fin du texte d'entrée ont été conservés.

Si vous utilisez une couleur d'arrière-plan transparente dans ce qui précède, vous pouvez ensuite aplatir l'image rognée pour convertir les zones non dessinées dans la même couleur que la "sous-couleur" utilisée.

Le résultat de ce qui précède (à l'exception de l'ajout de " -border " est en fait presque exactement ce que IM produit maintenant en utilisant un " label: " et en lisant à partir d'un nom de fichier échappé ' @ '. Cependant " label: " le fait plus rapidement, et manière beaucoup plus propre (via la bibliothèque " freetype " plutôt qu'une conversion postscript).

Vous pouvez spécifier une taille " -page " plus petite, soit en pixels (voir l'exemple suivant), soit en utilisant une taille de page multimédia (comme " A5 "), en utilisant le paramètre " -density " ou la résolution en pixels. Vous pouvez également spécifier le décalage auquel commencer à dessiner le texte sur la page, par rapport au coin supérieur gauche. Par exemple.

Presque tous les autres opérateurs de création d'images utilisent le paramètre " -page " pour définir une " toile " virtuelle plus grande et un " décalage " pour l'image sur cette toile, généralement dans le but de superposer des images ou de générer des animations. Pour cette raison, c'est probablement une bonne idée de réinitialiser votre paramètre de page en utilisant " +page " après toute opération " text: " ou " ps: ", ou vous pouvez obtenir des résultats inattendus pour toutes les images secondaires que vous pouvez lire plus tard sur le même ligne de commande.

C'est aussi pour cela que j'ai ajouté un opérateur " +repage " à l'exemple ci-dessus sinon le texte est décalé, et l'image générée est également décalée !

Pour plus de détails sur l'utilisation de ce décalage, voir Attributs d'image de page.

Notez que dans le dernier exemple, toute ligne de texte trop longue pour s'adapter à la largeur de la page débordera de la page et ne sera pas « enroulée ». Cela permettra de recadrer et de supprimer efficacement la fin des lignes. De plus, s'il y a trop de lignes, alors " text: " générera plusieurs pages et donc plusieurs images , une pour chaque page générée par la traduction postscript du fichier texte.

Si vous n'êtes intéressé que par la première page de texte, ou si vous voulez simplement éviter la possibilité de plusieurs images, ajoutez un ' [0] ' au nom de fichier " text: ", pour dire à IM de ne lire que la première page générée après le le texte a été converti en images (voir exemple précédent).

Postscript/PDF - Saisie de texte et de graphiques préformatés (ou d'autres formats d'images vectorielles)

Cette méthode peut être étendue pour vous donner un contrôle très fin de l'apparence exacte du texte en tant qu'image. Par exemple, avec le bon filtre « texte vers postscript », vous pouvez contrôler l'habillage des mots, les justifications, la gestion de plusieurs polices, les caractères gras, les bordures, les titres, les noms de fichiers, les dates et autres éléments de l'image postscript.

Cependant, comme cette section concerne le texte en image, cela signifie que vous devez d'abord convertir votre texte en un fichier postscript formaté. Il existe de nombreux programmes externes qui peuvent être utilisés pour ce faire. Par exemple " a2ps ", " enscript " ou " pstext ".

Essentiellement, vous pouvez utiliser un traitement de texte (comme ' OpenOffice ' ou ' Word ', ou même ' Notepad '), OU si vous voulez un système de traitement de texte par lots, vous pouvez utiliser à ' TeX ' et ' LaTeX ' pour générer votre pré-formaté texte (voir Un système de traitement de texte complet ci-dessous). Ces programmes sont tous conçus pour gérer la complexité du mélange de texte brut, gras, de tailles et de polices différentes, ainsi que les contrôles d'emballage de mots, de justification et de mise en paragraphe. La sortie de ces programmes peut ensuite être transmise à IM pour la convertir en une image de la taille et de la qualité que vous désirez.

Alors, générons d'abord du postscript (conversion de texte à partir d'un programme de fortune personnel).

La commande " perl " dans l'exemple ci-dessus ajoute une ligne ' %%LanguageLevel: 3 ' au fichier postscript généré. Cela est nécessaire pour que les options postscript transparentes ultérieures fonctionnent correctement pour préserver la transparence.

Le vrai problème ici est que le programme délégué " ghostscript " ne fournit pas une méthode de conversion unique pour IM, obligeant IM à essayer de trouver le style d'appel correct à utiliser pour générer une image correcte pour le postscript donné. Le « Niveau de langue » donne à IM l'indice dont il a besoin pour le comprendre correctement.

--> Maintenant, nous pouvons convertir cela en une image, en rognant le résultat (selon les exemples " text: " ci-dessus) pour supprimer les zones vides en excès de la page/toile par défaut générée.

Notez l'utilisation de ' [0] ' pour limiter l'entrée à la première page uniquement. Si votre image postscript génère plusieurs pages, elle sera toujours entièrement traitée par le délégué " ghostscript ", mais IM ne lira que la première image renvoyée, plutôt que de générer plusieurs images, une image par page. Si votre postscript est très volumineux, vous pouvez utiliser d'autres utilitaires postscript pour limiter le nombre de pages avant de le traiter avec IM et " ghostscript ".

Comme vous pouvez le voir, le postscript converti à la " -densité " par défaut de 72 dpi, n'est souvent pas aussi beau qu'il le devrait, avec seulement une quantité minimale d'anti-aliasing. C'est particulièrement le cas lorsqu'il s'agit de polices PostScript, qui ne sont pas conçues pour fonctionner à ces basses résolutions.

Pour améliorer cela, vous pouvez utiliser une technique de Super Sampling pour générer une meilleure image. Dans ce cas vous demandez à " ghostscript " de dessiner la page à une résolution plus élevée (ou image " -density "). Vous pouvez ensuite " -resample " (un redimensionnement spécialisé) pour ramener cette image plus grande à une densité de résolution d'écran plus "normale".

La valeur « 196 » correspond à 3 fois les 72 dpi finals, ce qui signifie que lorsque « -resample » est utilisé, environ 3×3 pixels sont fusionnés dans chaque pixel. Cela produit de meilleurs pixels d'anticrénelage le long des bords du texte, améliorant ainsi l'aspect général du résultat.

Notez également qu'utiliser une densité ou une résolution plus grande n'est pas tout à fait la même chose que simplement agrandir une police. Les définitions de police peuvent avoir des ajustements pour gérer les situations de faible résolution. Par exemple, comparez le trou dans la lettre « e » dans les deux images. La version originale est plus nette en raison d'un traitement spécial au sein de la police, même si dans l'ensemble, la dernière version super échantillonnée est plus claire. Pour plus d'informations, voir Résolution, Taille en points et Taille de police réelle ci-dessous.

Vous n'êtes pas obligé d'utiliser les valeurs ci-dessus, car parfois une valeur légèrement différente peut produire un résultat meilleur ou plus souhaitable. Bien sûr, avoir " ghostscript " générer une image 2, 3 ou même 4 fois plus grande signifie également que IM prendra 4, 9 ou 16 fois plus de temps pour générer l'image ! Il utilisera également beaucoup plus de mémoire et d'espace disque temporaire ! Mais les résultats en valent généralement la peine.La meilleure idée est de l'essayer pour votre propre document et de voir ce qui vous donne les meilleurs résultats.

De plus, si vous avez besoin de plus d'anticrénelage, plutôt que d'utiliser une résolution d'entrée encore plus grande, vous pouvez essayer de flouter l'image d'une quantité inférieure au pixel (disons « -flou 0x0,7 ») avant de réduire sa taille. J'ai aussi parfois constaté qu'une très petite quantité de flou après le redimensionnement (une technique photoshop courante) peut améliorer le résultat final global.

Mais je ferais attention à ces ajustements, car cela pourrait aggraver les choses.


Si vous préférez avoir un fond transparent au lieu de blanc, vous pouvez spécifier un paramètre " -channel " de ' RGBA ', pour inclure le canal alpha dans l'image. Bien sûr, vous devrez utiliser un format d'image capable de gérer des couleurs semi-transparentes.

Notez que la bannière utilise toujours une couleur blanc cassé pour ses arrière-plans, plutôt que d'être également rendue transparente ou semi-transparente. C'est parce que le postscript généré dessine en fait cet arrière-plan, remplaçant l'arrière-plan par défaut de la page (qu'il soit blanc ou transparent).

Rendre l'arrière-plan transparent comme celui-ci vous permettra de superposer votre image postscript sur une couleur d'arrière-plan spécifique.

En utilisant une méthode de composition Alpha, vous pouvez même la superposer sur une image d'arrière-plan spécifique ou sur un arrière-plan en mosaïque.

Comme presque toutes les imprimantes PostScript ne peuvent assombrir que le papier ou un transparent (ceci inclut les imprimantes couleur), lorsque ce qui précède est imprimé, la bannière devient automatiquement semi-transparente.

Si vous souhaitez également que la messagerie instantanée fasse la même chose, comme le ferait une imprimante, vous pouvez utiliser une composition alpha spéciale " Multiplier ", pour superposer l'image " d'arrière-plan blanc " sur le fond " papier " souhaité.

Si vous avez une image PostScript en couleur, vous pouvez également simuler une imprimante en noir et blanc pur sur du papier de couleur en utilisant la méthode de composition spéciale " BumpMap ". Cela mettra à l'échelle de gris l'image de superposition source, avant qu'elle n'utilise la multiplication pour composer les images ensemble.

Vous pouvez également générer l'équivalent de l'image en niveaux de gris d'une diapositive de transparence aérienne. Cela utilise essentiellement l'image d'arrière-plan blanc opaque (d'en haut) comme un "masque" qui permet de définir une image transparente en forme à l'aide de l'opérateur de forme alpha.

Comme le convertisseur " text: " ci-dessus, le convertisseur " ps: " utilise également le paramètre " -page " pour définir la taille de la toile de l'image 'média' sur laquelle la page est dessinée. Bien que le décalage fourni soit ignoré. Cependant, comme la plupart des fichiers postscript définissent la taille du support de dessin en interne, cela n'est généralement pas nécessaire.

La plupart des autres opérateurs de création d'images utilisent le paramètre " -page " pour définir un " canevas virtuel " et un décalage sur ce canevas virtuel (par exemple pour générer des animations GIF). En tant que tel, c'est probablement une bonne idée de le réinitialiser en utilisant " +page " après l'avoir utilisé pour une opération de lecture d'image " text: " ou " ps: ", sinon vous risquez d'obtenir des résultats inattendus avec les images ultérieures.

Pour plus de détails sur l'utilisation de ce décalage, voir Attributs d'image de page.

Comme dernier exemple pratique, jetez un œil à mon image Ray Traced Tetrahedron. D'autres images similaires peuvent être vues dans Studies into Polyhedra.

La page d'arrière-plan a été générée à partir des mêmes données utilisées pour produire l'objet mathématique 3D affiché. Les données textuelles ont été converties à l'aide de " a2ps ", puis IM a été utilisée pour les convertir en image. Sur cette image, d'autres dessins au trait pré-préparés du même objet mathématique ont été ajoutés à la page. Cette image finale (enregistrée au format 'targa' ou TGA) a ensuite été transmise au ray-tracer " PovRay " pour être incluse dans l'image finale ou la scène de ray tracing.

Utilisation directe de GhostScript

Par exemple au lieu de courir.

Vous pouvez demander à GhostScript de le faire directement.

Cela évite à IM de générer un fichier temporaire volumineux (pour la sécurité et la gestion des images en pipeline). En conséquence, l'utilisation directe de GhostScript peut économiser beaucoup de gestion de fichiers et de traitement d'E/S, et peut augmenter considérablement les performances lors du traitement de fichiers postscript et PDF.

Cependant, " ghostscript " ne peut pas redimensionner les images (autre que d'ajuster la densité ou la résolution de sortie) et ne sera probablement pas en mesure de sortir l'image dans le format de fichier image dont vous avez besoin, ou à la qualité que vous souhaitez. Mais vous pouvez toujours transmettre la sortie GhostScript à ImageMagick pour terminer la tâche.

C'est particulièrement le cas si vous souhaitez super-échantillonner les résultats (entrée de résolution plus élevée, pour redimensionner une sortie plus petite).

GhostScript peut être un programme difficile à utiliser ou à corriger pour des types spécifiques de postscript. Cristy se bat constamment avec ces problèmes au nom des utilisateurs de messagerie instantanée, et en cela, il a fait un super effort. Malheureusement, face aux nombreuses choses qui peuvent (et se produisent) se produire, IM ne peut pas fournir de méthode simplifiée pour postscript/PDF via GhostScript.

Dessiner - Dessiner du texte sur un canevas existant

Cependant, pour l'utiliser, nous devons générer une image d'arrière-plan de la taille appropriée pour dessiner la police, ce qui peut être délicat lors du dessin d'un texte inconnu. Voir Dimensionnement automatique des images de police pour savoir comment résoudre ce problème.

De nombreuses options supplémentaires, au-delà des options de texte standard, affectent également la façon dont " -draw " dessine réellement le texte sur une image. Non seulement vous pouvez spécifier une couleur " -fill ", mais vous pouvez également spécifier une couleur " -undercolor ", ainsi qu'une couleur de bord ou de " -stroke ", qui sont toutes deux désactivées par défaut (définies sur une couleur de ' rien '.

La couleur " -fill " peut également être remplacée par un motif d'image " -tile ", tandis que la largeur du bord du trait peut être modifiée à l'aide de " -strokewidth ". Ensuite, la position relative du texte dessiné peut être modifiée avec le paramètre " -gravity ".

Par exemple, ici, j'ai utilisé bon nombre des fonctionnalités supplémentaires que je viens de mentionner.

Depuis la version IM 6.2.4, l'opération " -draw text" ne comprend plus l'utilisation de ' ' comme signifiant une nouvelle ligne, ou l'utilisation du pourcentage ' % ' d'informations d'image s'échappe. (Voir Dessiner un pourcentage de bug).

Ces capacités et problèmes restent cependant disponibles dans le nouvel opérateur IM v6 " -annotate ". Voir l'opérateur de dessin de texte d'annotation ci-dessous.

Toutes les options ci-dessus peuvent également être utilisées dans la chaîne " -draw " (MVG - Magick Vector Graphic). Cependant, si vous définissez l'option ci-dessus dans l'argument draw, cette option ne s'appliquera qu'à cette chaîne MVG de dessin spécifique.

En plus de cela, le format de dessin MVG peut faire beaucoup plus, comme une rotation de texte et une "décoration" de la police et bien sûr, vous pouvez également dessiner diverses formes comme des cercles sur l'image.

Par exemple, ici, nous dessinons du texte souligné et pivoté, superposé sur quelques cercles d'arrière-plan.

Si vous voulez vraiment utiliser au maximum " -draw " pour créer votre image, je vous suggère de regarder la page d'exemples de dessin.

Boîte de sous-couleur

L'utilisation principale de l'option " -undercolor " est un moyen simple et rapide d'effacer un arrière-plan " bruyant " autour du texte. Par exemple, regardez Annoter sur les meilleures images. Cependant, il est recommandé d'ajouter également un espace supplémentaire au début et à la fin de la chaîne dessinée dans ce cas.

Débordement de la zone de délimitation

Un concepteur de polices peut « dessiner » des caractères individuels (ou « glyphes ») n'importe où par rapport à la position actuelle du texte (appelée curseur). La position de la police n'a même pas besoin d'avancer, et dans certaines polices internationales, elle peut même reculer !.

Le résultat de cette liberté de conception est que certains « glyphes » ne rentrent pas dans la zone de dessin définie dans laquelle la police déclare que le caractère s'intègre, en particulier sur les polices inclinées ou de type script où certaines parties des lettres s'étendent bien au-delà des limites et dans les zones utilisées par les caractères ultérieurs (ou précédents).

La pire police que j'ai vue à cet égard est la police « LokiCola », qui dessine environ la moitié de ses lettres majuscules avec de longues queues ondulées, bien au-delà des limites des cellules de caractère individuelles. La police suppose essentiellement que chaque lettre majuscule sera suivie de 3 lettres minuscules ou plus.

Pour montrer cela, je vais dessiner séparément un certain nombre de lettres majuscules de la police, vous permettant de voir jusqu'où les lettres pourraient s'étendre au-delà de la cellule « undercolor » ou des limites de dessin. J'en utilise également quelques-unes pour former le nom des polices, afin que vous puissiez voir exactement comment elles ont été conçues pour être utilisées et pourquoi elles débordent de leurs cadres de délimitation.

Notez également comment le 'H' déborde en fait sur le côté gauche ainsi que sur le côté droit de sa zone de dessin. Cela peut le rendre difficile à utiliser en début de ligne.

N'oubliez pas que ce problème n'est PAS un bogue dans IM, mais causé par l'interaction de la bibliothèque de polices utilisée par IM et des paramètres de la police elle-même, généralement volontairement par le concepteur de la police. IM utilise simplement les résultats tels qu'ils sont programmés dans la police, ce qui ne produit pas toujours ce que l'utilisateur voulait. La prudence est donc de mise avec les polices inhabituelles.

Annoter - Opérateur de dessin de texte

Bien que l'opérateur utilise les primitives " -draw ", il le fait d'une manière plus complexe, par exemple en développant des caractères d'échappement spéciaux pour ajouter des informations d'image supplémentaires et même plusieurs lignes, et en appliquant une transformation de système de coordonnées au texte dessiné pour produire des inclinaisons et des rotations.

Pour cette raison, l'opérateur est désormais l'opérateur de dessin de texte préféré pour tous les dessins de texte et annotations d'images ImageMagick, et cela se reflète maintenant dans ces pages d'exemple.

Voici un exemple de base utilisant cet opérateur.

L'une des fonctionnalités supplémentaires de l'opérateur " -annotate " est qu'il peut faire pivoter les axes X et Y du texte dessiné complètement séparément l'un de l'autre. Cela se fait en fournissant l'angle de rotation de chaque axe en tant que "taille d'image" dans l'argument des opérateurs.

Juste pour montrer à quel point une seule opération " -annoter " peut être complexe, voici une image encadrée, dessinée et inclinée.

Dans cet exemple, les quatre arguments d'annotation sont donnés. Plus précisément, la rotation de l'axe X, la rotation de l'axe Y et la position des polices X et Y sur l'image d'arrière-plan.

Notez également que le motif de remplissage (défini avec " -tile ") est également incliné avec la police. C'est parce qu'il est dessiné à l'aide d'un système de coordonnées cisaillé/tourné, qui cisaille également et remplit le motif en mosaïque dans le texte dessiné.

Un autre exemple de cette capacité de cisaillement est l'exemple Sheared Shadow Font. Comparez cela avec la police inclinée créée avec la chaîne MVG " -draw " équivalente.

Pour un tableau résumant les effets de l'opération de cisaillement " -annotate ", consultez Annotate Argument Usage.

Par exemple, voici du texte légèrement pivoté.

Notez que l'angle donné à " -annotate " doit être positif pour que IM le comprenne correctement). L'exception à cette règle est l'utilisation d'une forme d'argument géométrique à 4 chiffres séparés par des virgules. Par exemple " -annotate '-10,-10,20,90' 'Anthony' ", aurait pu être utilisé dans le dernier exemple.

Cela peut être utilisé pour générer un étiquetage condensé incliné. Par exemple. Vous pouvez également ajouter d'autres informations sur l'image actuelle à la chaîne annotée à l'aide de caractères d'échappement. Par exemple, écrasons l'image " rose: " intégrée avec des informations sur la taille des images. Pour centrer le texte sur l'image, nous utilisons un paramètre " -gravity " et désactivons toutes les rotations et tous les décalages en utilisant un argument " -annotate " de ' 0 '.

Pour d'autres exemples d'annotation de texte sur une image plus grande de différentes manières (par exemple centré sur le côté ou tourné dans le coin inférieur droit), voir Exemples pratiques d'annotation de texte.

Canevas de texte annoté de taille automatique

Voici un exemple typique du problème. Lorsque j'ai configuré cette commande pour la première fois, j'ai réglé ma taille sur les résultats que je voulais, et au début, cela a plutôt bien fonctionné. Mais alors j'ai eu ça.

Ce dont nous avons besoin, c'est de pouvoir utiliser l'opérateur " -annotate ", mais avec le canevas dimensionné pour s'adapter au texte annoté.

Une solution consiste à utiliser une toile beaucoup plus grande, puis à " rogner " l'arrière-plan à la bonne taille. J'ai également ajouté une " Bordure " pour ajouter un peu d'espace supplémentaire autour de la police et du bord final de l'image, pour un meilleur rendu.

Cette méthode est bien meilleure que d'essayer de deviner la taille de votre image finale, cependant " Canvas Trim " ne rognera pas un arrière-plan multicolore en mosaïque.

La meilleure solution est de créer le canevas en utilisant " label: ", pour générer le canevas de la bonne taille. Un remplissage de couleur de dessin est ensuite utilisé pour mosaïquer une image sur le canevas (et le texte de l'étiquette), et enfin nous annotons notre texte à l'aide d'une autre image de mosaïque.

Notez que la position du texte dans une image " label: " centrée peut ne pas correspondre exactement à la position d'une opération " -annotate " centrée. Les deux méthodes suivent des algorithmes de traitement complètement différents et, en tant que telles, peuvent ne pas correspondre. Surtout lorsque des polices inhabituelles sont impliquées.

Dimensionné automatiquement à l'aide de la « boîte de sous-couleur »

Juste un mot d'avertissement, certaines polices dessinent des caractères bien en dehors de la zone de dessin de caractère individuel. (Par exemple, voir Undercolor Box ci-dessus). Dans ce cas, le résultat ci-dessus fonctionnera, mais vous devrez peut-être utiliser un canevas transparent, puis superposer le résultat sur du blanc (en utilisant une opération comme " -background white -flatten " par exemple), pour convertir les zones inutilisées et toujours transparentes au blanc. Cependant, ce personnage touchera probablement un bord de l'image résultante. Fondamentalement, vous ne pouvez pas vraiment gagner, dans toutes les situations, faites de votre mieux.

Coloration d'une image de texte en niveaux de gris

Ici, par exemple, j'utilise l'opérateur Level by Colors, " +level-color ", pour modifier globalement les couleurs de l'image afin d'affecter les couleurs de premier plan et d'arrière-plan avec des valeurs spécifiques.

Par exemple, ici, j'utilise le masquage composite pour remplacer l'arrière-plan et le premier plan par des images de motif.

L'opérateur inverse ci-dessus est utilisé pour réorganiser les images, de sorte que la première image devient la troisième image de « masquage » de la composition. L'image de premier plan (" plasma: ") devient alors la première, et l'arrière-plan au milieu.

Pour d'autres techniques de coloration d'une image en niveaux de gris comme celle-ci, consultez Utilisation d'un masque pour limiter la zone composée. Et plus généralement Utiliser des Masques avec des Images.

Pour d'autres méthodes de génération de dégradés pour la mosaïque, voir Dégradés de couleur, Points de couleur clairsemés et Canevas aléatoires.

Polices

Détermination des métriques de police, sans utiliser d'API

Il est également important de se rappeler que la plupart des polices sont des polices proportionnelles, ce qui signifie que chaque caractère individuel aura une largeur différente et une avance « naturelle » différente du curseur (ou origine). En tant que tel, chaque « chaîne » spécifique de caractères sera rendue (dessinée) avec une longueur différente sans aucun égard réel au nombre réel de caractères utilisés dans la chaîne.

L'exception à cette règle sont les polices « Fixed-Width », telles que les polices « Courier », « Typewriter » ou « Terminal », dans lesquelles tous les caractères ont la même largeur, ce qui vous permet de générer facilement des colonnes de texte.

Le paramètre de débogage " -debug annotate " peut être utilisé pour que IM rapporte directement les métriques d'une police TTF, pour une chaîne spécifique. Par exemple.

Comme vous pouvez le voir, vous obtenez un ensemble d'informations que vous pouvez utiliser : à partir des limites déclarées de la chaîne dessinée (qui ne sont pas nécessairement les limites réelles de la chaîne), par rapport à l'origine jusqu'au montant que le « carat » (origine) doit avancer avant de tirer la chaîne suivante.

La sortie de débogage complète (qui est plutôt détaillée et non illustrée ci-dessus) indique également le fichier de police réel utilisé (deux fois) afin que vous puissiez également l'utiliser pour vérifier que vous avez également la bonne police.

La méthode " -debug annotate " a été ajoutée à IM v6.3.9-2

Techniques plus anciennes

Par exemple permet de connaître les dimensions de la police ' Ravie ' par rapport à une ligne de base fixe, à 72 points.

Voici l'image que nous allons étudier, à titre de référence. Vous n'avez pas besoin de le dessiner et de l'enregistrer en tant qu'image, car nous extrayons uniquement des données, pas une image. les couleurs de cette image seront modifiées afin que nous puissions regarder les parties blanches et noires séparément en utilisant " -trim " pour extraire les métriques utilisées.

Pour les mesures de base de la police de base, nous dessinons d'abord la police elle-même avec une couleur transparente ("Aucun"), afin que nous puissions mesurer, trouver la taille et l'emplacement de la zone de délimitation ou de la zone de dessin de ce caractère spécifique, pour cette police. Notez que pour les informations sur la hauteur, vous pouvez simplement dessiner n'importe quoi.

D'après les résultats ci-dessus, nous pouvons voir qu'une police 'Ravie' à 72 points aura une hauteur totale de cadre de délimitation de 74 pixels. Le haut de la boîte est à 42 pixels du haut de l'image, car la ligne de base qui était positionnée à une coordonnée y de 100 pixels, la boîte commence à 100 - 42 ou 58 pixels au-dessus de la ligne de base. Cela laisse 74 - 58 ou 16 pixels pour le cadre de délimitation en dessous de la ligne de base pour les descendeurs.

Notez que toutes les polices ne limitent pas leur dessin dans leur cadre de délimitation de dessin défini ! Cependant, certaines lettres peuvent s'étendre bien au-delà de ces limites. C'est pourquoi l'exemple ci-dessus définit une couleur " -fill " de ' none '. De cette façon, les polices qui se comportent mal n'affecteront pas les mesures ci-dessus.

Notez également que la distance séparant les lignes (les lignes de base en fait) doit être purement déterminée par la taille en points de la police et n'a rien à voir avec la façon dont la police est dessinée. Dans notre exemple, comme la police a une taille en points de 72 points et qu'un point est défini comme 1/72e de pouce, les lignes de base doivent être distantes de 1 pouce. Avec une résolution de sortie actuelle (densité) de 72 pixels par pouce, cela signifie que les lignes de base seront distantes de 72 pixels.

Il est intéressant de noter que cela signifie que pour cette police, avec un cadre de délimitation de 74 pixels, la police a un chevauchement de deux pixels pour la zone de dessin entre les lignes de texte correctement à simple interligne !

De plus, à partir des mesures ci-dessus, nous pouvons voir qu'en dessinant la chaîne " A " dans cette police à cette taille de point, le caractère suivant doit être dessiné à 66 pixels à droite du point de départ (appelé caret). Il s'agit de la longueur "logique" des chaînes. C'est-à-dire que le 'caret' ou le point de départ du prochain caractère doit commencer à 20 + 66, ou à ' +86+100 ' (la ligne de base ne change pas verticalement). Soyez averti que certaines polices arabes peuvent en fait dessiner de droite à gauche, donc le décalage 'caret' sera négatif.

Cela permet d'utiliser les mesures de police pour le caractère « A », mais qu'en est-il des dimensions physiques du « A » dessiné par rapport au « caret » ou au point de départ. Eh bien, échangez simplement les deux paramètres de couleur.

Du point de vue de la hauteur, le caractère se trouvait dans les limites de dessin définies, sa hauteur allant de 100 à 43 ou 57 pixels au-dessus de la ligne de base (dur contre sa zone de délimitation) à 60 à 57 ou seulement 3 pixels en dessous de la ligne de base des polices. En d'autres termes, cette lettre n'a pas de « descendeur » dessiné dans la zone en dessous de la ligne de base.

De là, nous pouvons voir que le 'A' dessine de 3 pixels avant le curseur (positionné à +20, mais l'image finale est à +17), à 70 - 3 ou 67 pixels après la position du curseur. En d'autres termes, cette police est légèrement plus large que sa boîte de liaison horizontale, lorsqu'elle est dessinée.

Notez que bien que cela vous donne la longueur réelle de la chaîne dessinée, cela est différent du décalage de curseur nécessaire lors de l'ajout de texte (qui est défini par le cadre de délimitation des chaînes, et non par sa longueur dessinée). En d'autres termes, le texte doit être ajouté en utilisant leurs cadres de délimitation, et non leur taille réelle de longueur dessinée comme nous l'avons fait dans d'autres exemples.

Bien sûr, si vous obtenez une police qui se comporte très mal, vous voudrez peut-être vérifier jusqu'où une chaîne spécifique dépasse ses limites afin que vous puissiez toujours lui fournir de l'espace, par exemple à la fin d'une ligne.

Les dimensions extraites d'une police varieront également avec le " -strokewidth " actuel utilisé pour dessiner la police. Si vous augmentez la taille du trait de contour, les dimensions (et la taille de la zone de délimitation) nécessaires pour dessiner la police sont également agrandies de la même quantité pour s'adapter au contour plus épais.

Les dimensions varient également en fonction du système d'exploitation (type et version) et de la version de la bibliothèque de dessins de polices déléguée utilisée par IM sur ce système, même lorsque la même bibliothèque de polices et la même version IM n'ont pas changé. La prudence est recommandée lorsque différents ordinateurs peuvent être utilisés pour le dessin de texte, car les résultats peuvent varier même pour la même police.

Pour plus d'informations, consultez le document TrueType Fundamentals (PDF). Cela montre que même mes généralisations ci-dessus peuvent ne pas toujours être vraies, bien que ce soit généralement le cas.

Notez que les exemples ci-dessus ne renverront que des dimensions en pixels entiers, où toutes les dimensions utilisées par les polices sont des nombres à virgule flottante. En fait, le fait qu'une police soit même dessinée à partir d'un point de départ d'un pixel entier (caret) peut dépendre de l'application et affecter l'apparence résultante de la police.

Création de lignes de styles de police mixtes

C'est le genre de chose que des programmes comme les traitements de texte, les navigateurs Web, les imprimantes de documents font très bien, généralement sous l'interaction de l'utilisateur, mais peu peuvent le faire aussi bien sous le contrôle du programme.

Une exception à cela est " TeX " et sa famille de programmes (voir Un système de traitement de texte complet ci-dessous), donc si vous êtes sérieux au sujet du traitement de texte graphiquement, je vous suggère de regarder cette famille de programmes.

Une autre alternative est de regarder divers programmes d'impression de documents « jolis » tels qu'un convertisseur HTML. Vous pouvez les utiliser pour convertir les documents générés par le programme en postscript que la messagerie instantanée peut ensuite facilement post-traiter dans le format ou le style d'image que vous souhaitez.

Une solution API (utilisant l'interface API C MagickWand) a été créée par "El Supremo" (à partir des forums de discussion IM) dans son programme FontMetrics. et voici un exemple de sortie de "FontMetrics".


Maintenant, bien que la ligne de commande IM ne soit pas conçue pour le "traitement de texte", cela ne signifie pas que vous ne pouvez pas l'utiliser pour cela. C'est juste plus difficile. Ici, je vais donner quelques exemples de mélange de texte dans différentes polices et styles, pour donner aux gens un point de départ.

La solution la plus simple à laquelle les gens pensent généralement consiste à simplement ajouter des images « label : » ensemble.

Cependant, comme vous pouvez le voir, toutes les images sont alignées verticalement en haut de l'image et, à moins que vous n'utilisiez des polices similaires, elles ne seront pas très belles.

Alternativement, vous pouvez utiliser une astuce d'ajout de justification pour les aligner le long du bas.

Cela a permis d'ajouter un rembourrage supplémentaire en haut de chaque étiquette et de les recadrer tous à la même hauteur avant de les ajouter horizontalement. Après cela, un simple " -trim " et un " -flatten " ont été utilisés pour définir la hauteur de la ligne sur l'étiquette la plus élevée et remplir l'arrière-plan.

Comme vous pouvez le voir, cela produit un meilleur travail, mais une petite police a tendance à produire un comportement semblable à un indice, plutôt qu'un texte correctement aligné.

Ce que nous devons vraiment faire, c'est aligner toutes les chaînes de texte sur leurs « lignes de base » et c'est très difficile sans accès à plus d'informations textuelles. Cette information est facilement accessible sous une API de programme, mais beaucoup plus difficile à partir de la ligne de commande. Une méthode est présentée dans la section d'exemple précédente.

Cependant, il est possible d'aligner les mots par leur ligne de base sans réellement collecter d'informations de base. Bien que les images textuelles " label: " ne fournissent aucun indice quant à la ligne de base des images, vous pouvez spécifiquement dessiner des images à une ligne de base fixe.

Sans API, vous ne pouvez pas non plus déterminer directement la longueur ou la hauteur du texte dessiné, vous devez donc d'abord utiliser un canevas suffisamment grand pour vous assurer que nous ne perdons aucune information sur l'image du texte. Ensuite, pour préserver les espaces de fin et la hauteur du texte, vous devez également faire bon usage de la fonctionnalité (" -undercolor ") disponible pour l'annotation de texte et fournir une limite pour le rognage de l'image.

Voyons donc comment vous pouvez le faire à partir de la ligne de commande.

Comme précédemment, le rognage des images se fait en deux étapes.

Dessinez d'abord le texte sur une image de base qui contient une ligne bleue verticale. Ainsi, lorsque nous rognons le texte, seule la largeur de l'image du texte sera rognée, laissant tous les mots à la même hauteur de ligne de base.

Après les avoir ajoutés ensemble, nous pouvons maintenant supprimer la ligne de construction bleue en la rendant entièrement transparente. Si vous ne générez qu'une image en noir et blanc, le meilleur moyen serait d'extraire simplement l'un des canaux non bleus à la place, ce qui garantit que vous obtenez vraiment toute la ligne de construction. Une deuxième coupe coupera ensuite les sections supérieure et inférieure, en les réduisant à la plus grande zone de délimitation.

Un aplatissement final de la même couleur que le cadre englobant supprime alors toute preuve de son utilisation dans la construction de la ligne.

Comme vous pouvez le voir, tout le texte est maintenant correctement aligné sur la ligne de base, quelle que soit la police ou la taille de points utilisée.

Bien sûr, dans ces exemples, je n'ai utilisé que du texte noir sur blanc. D'autres couleurs peuvent être utilisées, à condition qu'elles n'interfèrent pas avec la ligne de construction et l'arrière-plan transparent utilisés pour l'alignement du texte.

Avec cette technique, vous pouvez désormais générer des lignes de texte de polices mixtes et les ajouter verticalement dans un document plus volumineux.

Vous pouvez également voir que faire tout cela représente beaucoup de travail, un travail qui est normalement caché à l'utilisateur par les traitements de texte et les navigateurs Web. Si vous envisagez de faire beaucoup de ce genre de choses, je vous suggère d'examiner les alternatives que j'ai mentionnées précédemment.

Remplissage de formulaire

Les champs sont la largeur du texte, la gravité (justification), la couleur, la position x, y et le texte réel à placer pour ce champ.

Vous pouvez maintenant utiliser un simple script shell en boucle pour générer une étiquette de texte comme décrit ci-dessus, en attribuant le texte approprié aux positions de texte définies dans une image de formulaire (arrière-plan).

L'« image du formulaire » dans ce cas n'est qu'une image vierge, mais pourrait vraiment être n'importe quoi. J'ai également défini la couleur d'arrière-plan des étiquettes sur « blé » afin que la zone remplie soit visible, mais vous devez normalement définir cette valeur sur aucun.

Ce qui précède n'utilise pas de fichiers temporaires, mais utilise à la place un pipeline d'images au format MIFF. Il s'agit d'un exemple d'utilisation d'un format de diffusion d'images, dans lequel des images individuelles sont simplement ajoutées les unes aux autres dans un fichier ou un pipeline.

Ceci n'est qu'un point de départ. Les champs du formulaire peuvent provenir d'un fichier de définition, tandis que le texte à remplir provient d'une base de données ou d'une autre source de données. D'autres attributs peuvent également être définis, tels que la police à utiliser, les rotations de texte, etc. Vous pouvez également inclure à la fois la largeur et la hauteur, ou si le texte doit être enveloppé de mots en utilisant une légende doit être utilisée plutôt qu'une étiquette.

Voir aussi Épingles dans une carte pour un autre exemple de cette technique, un peu comme ci-dessus.

Alternatives au traitement de texte

Outil utilisé pour.
ImageMagick Traitement et préparations par lots d'images
Gimp Édition d'images GUI pour la résolution de problèmes ponctuels
LyX Traitement de texte GUI, construit pour générer.
Latex Traitement de texte pour documents et livres.
Texas Format de texte sous-jacent
(positionne les symboles et les polices sur les pages)
Metafont Générateur de polices TeX

Fondamentalement, ImageMagick peut faire beaucoup de choses, cela ne veut pas dire que c'est le meilleur outil pour ces choses. Pour les préparations de documents plus volumineux, il vaut mieux le traiter comme une partie d'un tout plus vaste.

Les divers outils « TeX » donnés ci-dessus sont généralement une installation standard pour la plupart des systèmes Linux et peuvent combiner du texte et des images en un tout unifié. Plus important encore, il conserve le texte sous forme de texte et formate le texte de manière appropriée, comme vous le spécifiez, effectuant presque tout le travail difficile de l'habillage des mots et des pages et de l'arrangement avec les images. Mais sans remplir un fichier 'doc' avec des déchets de formatage inutiles. Vous avez le plein contrôle, ou vous pouvez le laisser prendre les décisions.

Ils offrent un moyen de générer tout type de document, à partir d'une simple page, d'une newsletter ou même d'un livre complet. Si vous êtes sérieux au sujet de la génération de documents, alors ces outils valent la peine d'être examinés et appris.


Pango (Linux et MacOSX uniquement) fournit également une alternative. Il fournit de nombreuses fonctionnalités de traitement de texte en image non disponibles dans ImageMagick. Par exemple, les onglets, la justification, les marges, les en-têtes, etc. Il a même un langage de balisage quelconque pour permettre les changements de police au milieu du texte.


D'autres solutions incluent également les nombreux programmes de conversion de texte en postscript, tels que "a2ps" que je démontre en générant un exemple de fichier postscript dans Postscript Handling ci-dessus. Cela convertit et formate différents types de fichiers texte, avec un habillage de mots, des caractères gras et un contrôle de tabulation, ainsi que des options d'en-tête, de pied de page, de bordure et de plusieurs pages raisonnablement agréables. Il s'agit bien entendu d'un traitement d'image indirect via un langage intermédiaire Postscript ou PDF.

Une autre consiste à mettre en page le texte à l'aide de SVG, ou de la commande de dessin ImageMagick, bien que vous deviez ensuite gérer la mise en page. Il existe de nombreux outils pour convertir du texte en images, et la plupart peuvent être combinés avec ImageMagick pour post-traiter l'image texte et la fusionner dans votre image. Cela permet à ImageMagick de se consacrer à ce qu'il fait de mieux, le traitement d'images.


Python est considéré comme facile à apprendre et à exécuter presque partout. Il est utile pour un certain nombre d'applications, notamment l'éducation, l'analyse de données et le développement Web. Certaines des plus grandes entreprises au monde font largement appel à Python, notamment Instagram et Google.

Il s'agit d'un langage de programmation dynamique orienté objet (OO) comparable aux langages basés sur Microsoft .NET ou Java, en tant que substrat à usage général pour plusieurs types de développement de logiciels. Il fournit un support solide pour l'intégration avec plusieurs technologies et une productivité de programmation plus élevée tout au long du cycle de vie du développement. Il est particulièrement adapté aux grands projets complexes avec des exigences changeantes.

Développement Web, langages de programmation, tests de logiciels et autres

Python est également l'un des langages de programmation open source à la croissance la plus rapide et est utilisé dans des applications critiques pour la plus grande bourse du monde. Il constitue également la base de divers sites Web de publication haut de gamme, fonctionne sur plusieurs millions de téléphones portables et est utilisé dans des secteurs tels que le contrôle du trafic aérien, les longs métrages d'animation et la construction navale.

Commençons par une note positive et discutons des avantages de ce langage de programmation prolifique.

Avantages de l'utilisation de Python

Voici les avantages sont donnés ci-dessous.

#1. Facilité d'utilisation et de lecture

La plupart des programmeurs Python conviendraient que le plus grand avantage de Python est qu'il est facile à prendre en main. La facilité d'utilisation et la lisibilité sont bien plus qu'une simple commodité. Cela peut également profiter aux utilisateurs de votre programme. La facilité d'utilisation vous aide à penser plus clairement lorsque vous écrivez des programmes et d'autres personnes qui doivent les améliorer ou les maintenir.

Les experts et les débutants peuvent facilement comprendre le code, et vous pouvez rapidement devenir productif avec ce langage car il a moins de ‘dialectes’ que d'autres langages populaires comme Perl. Comme son code source ressemble au pseudo-code, il est également simple à apprendre. Dès que vous commencez à apprendre, vous pouvez commencer à coder efficacement presque immédiatement.

Dans l'ensemble, il faut moins d'efforts pour écrire un programme en Python qu'en utilisant d'autres langages comme Java ou C++. Ceci est également plutôt populaire parmi les universitaires, ce qui entraîne un grand bassin de talents. Il est considéré comme un moyen très productif d'écrire du code, et cela vient en partie de sa lisibilité et de sa syntaxe simple. Certains proviennent de ses capacités intégrées bien conçues et riches et de sa bibliothèque standard, ainsi que de la disponibilité de plusieurs modules et bibliothèques open source tiers.

Comme il est facile à comprendre, il est également facile à entretenir. Le langage est également dynamiquement flexible et typé, avec un code qui n'est pas aussi verbeux que les autres langages. Mais ce typage dynamique pourrait aussi jouer comme un inconvénient, dont nous parlerons plus tard.

#2. Simple et rapide

La communauté Python offre une assistance rapide et efficace aux utilisateurs, et des centaines de milliers de développeurs travaillent dur pour trouver et corriger les bogues et développer de nouveaux correctifs et améliorations du langage. Le offre également une rétroaction rapide à bien des égards. D'une part, les programmeurs peuvent ignorer diverses tâches qui devraient être effectuées dans d'autres langues. Cela réduit le temps et le coût de chaque programme et la maintenance requise pour le programme. Il permet également une adaptation rapide du code. Le langage peut être qualifié de prêt à l'emploi, ne nécessitant qu'un simple code à exécuter. Jouer et tester votre code devient beaucoup plus simple avec le langage, qui offre également un style de développement ascendant pour construire facilement votre application en testant les fonctions clés dans l'interpréteur avant de commencer à écrire du code de haut niveau.

L'interpréteur est facilement extensible, vous permettant d'intégrer du code C avec un simple module d'extension compilé. Cela motive également la réutilisation du programme avec des packages et des modules. Un certain nombre de modules sont déjà disponibles avec la bibliothèque standard, indispensable pour la distribution Python. Vous pouvez partager les fonctionnalités entre différents programmes en les divisant en plusieurs modules.

Le langage peut fonctionner sur plusieurs systèmes mais conserve son interface similaire, et sa conception ne change pas beaucoup avec chaque système d'exploitation puisqu'il est écrit en ANSI C portable. Cela signifie que vous pouvez facilement écrire Python sur un Mac, le tester sur un système Linux et télécharger sur un ordinateur Windows.

#3. Facilité d'utilisation avec l'IoT

L'Internet des objets ou IoT a ouvert d'énormes opportunités, et il peut jouer un rôle clé dans votre utilisation de ces opportunités. Le langage est en train de devenir un choix populaire pour l'IoT, avec de nouvelles plates-formes comme le Raspberry Pi basées sur celui-ci. La documentation de Raspberry P indique que le langage est facile à utiliser et puissant.

#4. Codage asynchrone

Il s'est avéré très efficace pour l'écriture de code asynchrone, qui utilise une seule boucle d'événement pour effectuer des travaux dans de petites unités plutôt que d'écrire des utilisations. C'est parce qu'il est plus facile à écrire ainsi qu'à maintenir sans conflit de recherche confus ou impasses, ou autres problèmes. Ces générateurs sont très utiles pour entrelacer l'exécution de plusieurs boucles de traitement.

#5. Une approche de programmation moins limitée

Par rapport à Java, il utilise une approche de programmation multi-paradigme beaucoup moins limitée. Par exemple, vous n'avez pas besoin de créer une classe OO distincte pour imprimer ‘Hello World’ en Python, mais vous devez le faire en Java. Il est multi-paradigme et prend en charge les styles de programmation fonctionnels, procéduraux et orientés objet. En Python, tout et n'importe quoi peut être un objet. Vous pouvez écrire des applications dans le langage en utilisant plusieurs paradigmes de programmation, et vous pouvez toujours écrire du code OO clair, clair et compréhensible.

#6. Intégration d'applications d'entreprise

C'est un excellent choix pour un langage de programmation qui inclut l'intégration d'applications d'entreprise (EAI). Il facilite le développement de services de développement Web, en invoquant des composants CORBA ou COM et en appelant directement depuis et vers du code Java, C++ ou C. Il fournit des fonctionnalités de contrôle de processus importantes et implémente des formats et protocoles de données Internet courants, traite des langages de balisage tels que XL, s'exécute à partir du même code d'octet sur les systèmes d'exploitation modernes, et peut être intégré en tant que langage de script.

#7. Son utilisation dans le développement Web

Il peut être et est largement utilisé pour le développement Web, à des fins allant du développement d'applications Web haut de gamme à de simples scripts CGI en passant par des frameworks à grande échelle tels que TurboGears et Django. D'autres exemples d'utilisation de Python dans le développement Web incluent le framework d'applications Web Quichotte, le système de gestion de contenu Plone et le serveur d'applications Zope. Vous pouvez facilement créer votre propre solution basée sur les bibliothèques standard étendues et faciles à utiliser de Python. Python fournit des interfaces pour la plupart des bases de données, fonctionne bien avec d'autres technologies de développement Web et dispose de puissantes fonctionnalités de traitement de documents et de texte.

#8. Son utilisation dans des applications scientifiques et numériques

Vous pouvez utiliser la bibliothèque d'imagerie Python et les kits d'outils de visualisation 3D MayaVi et VTK, ainsi que d'autres outils tels que ScientificPython et Numeric Python pour développer des applications numériques et scientifiques. Beaucoup de ces applications peuvent également être prises en charge par Enthought Python Distribution.

#9. Scripts d'application et tests de logiciels

La forte intégration de Python avec Java et C et C++ le rend très utile pour les scripts d'application. Il a été conçu dès le départ pour être intégrable et peut être un excellent choix pour un langage de script permettant de personnaliser ou d'étendre des applications plus volumineuses. Grâce à ses puissantes capacités de traitement de texte et d'intégration, il peut également être utilisé pour des tests logiciels approfondis. En fait, il est même livré avec son propre cadre de test unitaire. Il peut également être utilisé pour développer des applications de bureau à interface graphique haut de gamme. Vous pouvez utiliser des technologies ouvertes pour déployer votre application sur la plupart des systèmes d'exploitation. La prise en charge d'autres frameworks d'interface graphique tels que Motif, X11, Delphi, Carbon et MFC est également disponible.

#dix. Utilisation de Python dans le prototypage et avantage open source

Le prototypage en Python est plutôt simple et rapide, ce qui entraîne le développement du système final dans plusieurs cas. Puisque Python est plutôt agile, vous pouvez facilement refactoriser le code pour un développement rapide du premier prototype au produit final. La nature open source de Python est également un énorme avantage. Il est bien conçu, évolutif, portable, robuste et rapide en raison de sa nature. Sa syntaxe est facile à comprendre et il possède des fonctionnalités de langage avancées épurées et bien développées. À bien des égards, il dépasse les fonctionnalités et les capacités d'autres solutions comparables disponibles dans le commerce.

La licence open source de Python permet également la modification, la redistribution et l'utilisation sans restriction du langage et des applications basées sur celui-ci. La source complète est disponible et aucun coût de licence n'est impliqué, ce qui représente une énorme économie de coûts. L'assistance est disponible gratuitement via des ressources en ligne.

#11. Script côté serveur

Il est considéré comme un langage de script côté serveur puissant. Son code ressemble à du pseudo-code comme d'autres langages de script, et il n'a pratiquement pas de syntaxe riche ou compliquée. Il a été conçu pour que vous puissiez moins vous concentrer sur la commande que vous souhaitez utiliser et vous concentrer plutôt sur les règles métier de votre application.

#12. Portabilité et interactivité

Un autre énorme avantage de Python est sa portabilité et son interactivité, ce qui le rend beaucoup plus facile à apprendre. Il fournit une sémantique dynamique et des capacités de prototypage rapide. Il est souvent considéré comme un langage de collage, reliant des composants existants disparates. Il est hautement intégrable dans les applications, même celles utilisant d'autres langages de programmation. Cela vous permet de corriger de nouveaux modules pour Python et d'étendre son vocabulaire de base.

Inconvénients de l'utilisation de Python

Comme vous pouvez le faire, Python a d'énormes avantages. Mais il a aussi sa juste part de limites. Voici un aperçu d'eux :

#1. La vitesse

La vitesse, ou son absence, peut être un problème majeur. Puisqu'il s'agit d'un langage interprété, Python peut être plus lent que les autres langages compilés. Cependant, cela nous ramène à la séparation du langage et de l'exécution.Certains benchmarks de Python s'exécutent plus rapidement que l'équivalent de C ou d'autres langages de codage. La lenteur d'exécution de Python a été critiquée dans le passé, mais elle a été corrigée dans une certaine mesure avec des packages optimisés au cours des dernières années. Pourtant, Python peut être plus lent à certains égards pour les langages comme C++ et C et les plus récents comme Go.

#2. Manque d'informatique mobile et de navigateurs

Il est fort sur les plates-formes de bureau et de serveur, mais faible sur les plates-formes mobiles. Il n'y a eu qu'une poignée d'applications pour smartphone développées à l'aide de Python, et le langage est rarement vu du côté client des applications de développement Web.

Le langage n'est pas non plus présent dans les navigateurs de développement Web. La principale raison à cela est qu'il est difficile à sécuriser. Il manque toujours un bon bac à sable sécurisé pour le langage, et certains programmeurs considèrent qu'il est difficile voire impossible pour l'implémentation standard, Python.

#3. Restrictions de conception

Même les plus grands fans de Python accepteraient certaines restrictions de conception dans le langage car il est typé dynamiquement. Cela nécessite plus de tests et d'erreurs pour n'apparaître que pendant l'exécution. Le verrou de l'interpréteur global du langage signifie qu'un seul thread peut accéder aux composants internes de Python à tout moment.

#4. Maturité et disponibilité des packages

Il y a un manque d'équivalents Python pour plusieurs boîtes à outils Matlab. Beaucoup de ces boîtes à outils, modules et packages ne sont pas encore matures en termes de développement et sont mal pris en charge et documentés. Il fallait s'y attendre, étant donné qu'il est largement animé par une communauté de bénévoles qui n'ont peut-être pas le temps de documenter et de soutenir chaque module. Si vous envisagez d'obtenir un module ou un package pour Python, c'est toujours une bonne idée de voir si le module est activement maintenu avant de développer une application qui en dépend. Sinon, vous devrez développer vos propres correctifs et solutions de contournement pour le code.

Nous avons brièvement discuté de l'utilisation de Python dans les travaux d'ingénierie et scientifiques. Parmi les modules pour un tel travail, matplotlib, SciPy et NumPy sont parmi les plus importants. Alors que matplotlib et NumPy sont bien documentés, SciPy peut se comporter en documentation peu claire ou manquante. Par exemple, scipy.interpolate.LSQUnivariateSpline est utilisé pour ajouter une division de lissage pour les données, mais la documentation n'explique pas la signification des coefficients renvoyés par la méthode. Cela peut être problématique car la méthode renvoie moins de coefficients que prévu.

#5. Problèmes dans matplotlib

Il existe également certains défis dans matplotlib, qui est un package de traçage non interactif assez performant. D'une part, il y a un manque d'uniformité dans les interfaces pour diverses méthodes et fonctions. Par exemple, lorsque vous générez une zone de texte avec la fonction pyplot.annotate ou la méthode annotée de l'objet axes, vous pouvez utiliser le mot-clé xycoords pour spécifier si l'emplacement du texte est spécifié en tant que coordonnées de données, coordonnées fractionnaires de la figure ou coordonnées fractionnaires des axes. Mais ce mot-clé est manquant avec la fonction pyplot.text et seules les coordonnées des données peuvent être utilisées pour spécifier l'emplacement du texte, ce qui n'est généralement pas ce que veulent les programmeurs.

Articles recommandés

Ceci a été un guide sur les avantages et les limites de l'utilisation de Python. Ici, nous avons discuté du concept de base, avec les avantages et les limites de manière descriptive. Vous pouvez consulter les articles suivants pour en savoir plus –


4 réponses 4

En copiant ma réponse de SO :

Vous pouvez utiliser des méthodes de chaîne vectorisées pandas pour effectuer votre traitement et cela supprime également la boucle for pour des opérations pandas plus efficaces, cela devrait vous donner un peu de vitesse.

J'ai également changé votre expression régulière en [^a-zA-Zs] afin qu'elle ne corresponde pas au caractère espace.

Vous pouvez remplacer toutes ces étapes par une seule compréhension de liste qui vous donnera un peu plus de vitesse. Cela fonctionne environ 30 à 40 % plus rapidement :

Je ne peux pas commenter car faible rep mais je voulais juste ajouter une note rapide. C'est le même commentaire que j'ai fait sur votre message sur StackOverflow avant que vous ne déplaciez votre message.

Si vous utilisez un Deque au lieu d'une liste pour nettoyé_tweets, et que vous insérez devant la liste au lieu d'ajouter, gagnez-vous en performances ?

Je pense que cela accélérerait cette partie clean_tweets.append(cleaned_tweet) .

Edit : Pour le préprocess, en fait j'ai pensé à quelque chose. Avez-vous essayé de passer le mots vides définir comme paramètre au lieu de le créer à chaque fois pour chaque tweet ? Si la mots vides l'ensemble est grand, pourrait aider un peu. Cela rend également votre fonction de prétraitement un peu plus générique.


7.5. Construire la documentation¶

L'ensemble d'outils utilisé pour créer les documents est écrit en Python et s'appelle Sphinx. Sphinx est maintenu séparément et n'est pas inclus dans cet arbre. On a également besoin de blurb, un outil pour créer Misc/NEWS à la demande et python-docs-theme, le thème Sphinx pour la documentation Python.

Pour créer la documentation, suivez les instructions de l'une des sections ci-dessous. Vous pouvez afficher la documentation après la construction du code HTML en pointant un navigateur sur le fichier Doc/build/html/index.html .

Vous devez avoir installé la dernière version stable de Sphinx et de présentation sur votre système ou dans un virtualenv (qui peut être créé à l'aide de make venv ), afin que le Makefile puisse trouver la commande sphinx-build. Vous pouvez également spécifier l'emplacement de sphinx-build avec le SPHINXBUILD Fabriquer variable.

7.5.1. Utiliser make / make.bat¶

Sous Unix, exécutez la commande suivante à partir de la racine de votre clone de référentiel pour générer la sortie au format HTML :

ou bien faites -C Doc/venv html .

Vous pouvez également utiliser make help pour afficher une liste des cibles prises en charge par Fabriquer. Notez que make check est automatiquement exécuté lorsque vous soumettez une pull request , vous devez donc vous assurer qu'elle s'exécute sans erreur.

Sous Windows, un fichier batch make.bat essaie d'émuler Fabriquer aussi près que possible, mais la cible venv n'est pas implémentée, vous voudrez donc probablement vous assurer que vous travaillez dans un environnement virtuel avant de continuer, sinon toutes les dépendances seront automatiquement installées sur votre système.

Lorsque vous êtes prêt, exécutez la commande suivante à partir de la racine de votre clone de référentiel pour générer la sortie au format HTML :

Vous pouvez également utiliser make help pour voir une liste des cibles prises en charge par make.bat .

Voir aussi Doc/README.rst pour plus d'informations.

7.5.2. Utiliser sphinx-build¶

Parfois, nous voulons directement exécuter l'outil sphinx-build au lieu de passer par make (bien que ce dernier soit toujours la méthode préférée). Dans ce cas, vous pouvez utiliser la ligne de commande suivante à partir du répertoire Doc (assurez-vous d'installer les packages Sphinx, blurb et python-docs-theme depuis PyPI) :

où <builder> est l'un des éléments html, text, latex ou htmlhelp (pour des explications, voir les cibles make ci-dessus).