Création d'une image png avec du texte dedans

Description

Alors voila,

Je travaille actuellement sur un projet de site web dans lequel il faut parfois afficher des phonétiques de mots à l'utilisateur. Le problème est le suivant : Qui dit phonétique, dit caractères particuliers, et qui dit caractères particuliers dit police de caractères unicode. Il est impossible de s'assurer que l'utilisateur va posséder un police unicode sur son navigateur... donc le but du programme est de générer une image au format png qui contiendra le mot avec ses caractères phontétiques. Le client n'a donc plus à se soucer de savoir s'il possède la bonne police ou non.

Le petit programme que je vous propose est un programme en C# en mode console, qui prend plusieurs paramètres en entrée :
- Le texte à mettre dans le png (remplacer les espaces par le caractère "%")
- La police à utiliser
- La taille de la police
- L'emplacement ou nous devons créer l'image png.

En sortie, une image contenant le texte avec la bonne police est généré. L'image est de la taille qu'il faut (pas trop grande, pas trop petite), avec une police antialisaée (enfin si celle que vous avez choisie le permet) et le tout sur fond transparent...

Je sais que l'interpréteur d'arguments est bidon, mais le but ici n'est pas de faire un bon interpréteur mais une bonne image :-)

Voila, j'espère que ca pourra en aider certains !

Yoann

Source / Exemple :


using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace DefaultNamespace{
	class MainClass{
		public static void Main(string[] args){
			
			// Alors voila, si on a pas le bon nombre de paramètre, c'est que quelque chose ne va pas...
			// et donc, on affiche l'aide.
			if(args.Length != 4){
				Console.WriteLine("Argument 1 : texte à dessiner (remplacer les espaces par des µ)");
				Console.WriteLine("Argument 2 : Police du texte (remplacer les espaces par des µ)");
				Console.WriteLine("Argument 3 : Taille du texte");
				Console.WriteLine("Argument 4 : Chemin du fichier cible (remplacer les espaces par des µ)");
				Console.WriteLine("____________________________________");
				Console.WriteLine("Exemple :");
				Console.WriteLine("FontToPng 'Texteµàµafficher' ArialµsansµMS 12 c:\test.png");
				return;
			}
			// On récupère la chaine de caractères à écrire dans l'image.
			string TextToPrint = args[0].Replace('µ', ' ');
			
			// On créé la police (en tenant compte des paramètres 'FontName' et 'FontSize' que le programme prend
			// en paramètre d'entrée.
			Font myFont = new Font(args[1].Replace('µ', ' '), System.Int32.Parse(args[2]));
			
			// Création d'un objet bitmap de 1 de côté.
			Bitmap bmp = new Bitmap(1, 1, PixelFormat.Format32bppArgb);

			// Création d'un objet graphique lié à notre bitmap.
			Graphics objGraphics = Graphics.FromImage(bmp);

			// Récupération de la taille en pixels du texte à écrire.
			System.Drawing.SizeF SizeText = objGraphics.MeasureString(TextToPrint, myFont);

			// Les objets d'image que nous avions créés ne nous ont servi qu'à récupérer la taille du texte.
			// Il va maintenant falloir les détruire pour les recréer à la bonne taille (c'est à dire la taille
			// du texte en pixels à écrire).  
			objGraphics.Dispose();
			bmp.Dispose();

			// La, on recréé l'image aux bonne dimensions.
			bmp = new Bitmap(System.Convert.ToInt32(SizeText.Width), System.Convert.ToInt32(SizeText.Height), PixelFormat.Format32bppArgb);

			// Récupération de l'objet graphique...
			objGraphics = Graphics.FromImage(bmp);

			// On rempli le tout de couleur transparente...
			objGraphics.Clear(Color.Transparent);

			// On dessine enfin le texte...
			objGraphics.DrawString(TextToPrint, myFont, new SolidBrush(Color.Black), 0, 0);

			// Le flush permet de valider notre dessin. En gros, le DrawString va prendre effet maintenant...
			objGraphics.Flush();

			// On sauvegarde l'image à l'endroit spécifié...
			bmp.Save(args[3].Replace('\\', '/').Replace('µ', ' '), System.Drawing.Imaging.ImageFormat.Png);

			// Et on termine par une petite destruction d'objets.
			objGraphics.Dispose();
			bmp.Dispose();
		}
	}
}

Conclusion :


Ce code a été créé avec SharpDevelop (IDE gratuit que je vous recommande vivement)

http://www.icsharpcode.net/OpenSource/SD/

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.