2009-02-07 21 views
15

Estoy usando GDI + en el lado del servidor para crear una imagen que se transmite al navegador del usuario. Ninguna de las fuentes estándar se ajusta a mis necesidades y por eso quiero cargar una fuente TrueType y utilizar esta fuente para la elaboración de mis cuerdas a los gráficos del objeto:Uso de fuentes TTF personalizadas para la representación de imágenes DrawString

using (var backgroundImage = new Bitmap(backgroundPath)) 
using (var avatarImage = new Bitmap(avatarPath)) 
using (var myFont = new Font("myCustom", 8f)) 
{ 
    Graphics canvas = Graphics.FromImage(backgroundImage); 
    canvas.DrawImage(avatarImage, new Point(0, 0)); 

    canvas.DrawString(username, myFont, 
     new SolidBrush(Color.Black), new PointF(5, 5)); 

    return new Bitmap(backgroundImage); 
} 

myCustom representa una fuente que no está instalado en el servidor, pero para el cual tengo el archivo TTF.

¿Cómo puedo cargar el archivo TTF para que pueda usarlo en la representación de cadenas GDI +?

Respuesta

31

He encontrado una solución para usar fuentes personalizadas.

// 'PrivateFontCollection' is in the 'System.Drawing.Text' namespace 
var foo = new PrivateFontCollection(); 
// Provide the path to the font on the filesystem 
foo.AddFontFile("..."); 

var myCustomFont = new Font((FontFamily)foo.Families[0], 36f); 

Ahora myCustomFont se puede utilizar con el método Graphics.DrawString como se pretende.

14

Sólo para dar una solución más completa

using System; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Drawing; 
using System.Drawing.Text; 

public partial class Test : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string fontName = "YourFont.ttf"; 
     PrivateFontCollection pfcoll = new PrivateFontCollection(); 
     //put a font file under a Fonts directory within your application root 
     pfcoll.AddFontFile(Server.MapPath("~/Fonts/" + fontName)); 
     FontFamily ff = pfcoll.Families[0]; 
     string firstText = "Hello"; 
     string secondText = "Friend!"; 

     PointF firstLocation = new PointF(10f, 10f); 
     PointF secondLocation = new PointF(10f, 50f); 
     //put an image file under a Images directory within your application root 
     string imageFilePath = Server.MapPath("~/Images/YourImage.jpg"); 
     Bitmap bitmap = (Bitmap)System.Drawing.Image.FromFile(imageFilePath);//load the image file 

     using (Graphics graphics = Graphics.FromImage(bitmap)) 
     { 
      using (Font f = new Font(ff, 14, FontStyle.Bold)) 
      { 
       graphics.DrawString(firstText, f, Brushes.Blue, firstLocation); 
       graphics.DrawString(secondText, f, Brushes.Red, secondLocation); 
      } 
     } 
     //save the new image file within Images directory 
     bitmap.Save(Server.MapPath("~/Images/" + System.Guid.NewGuid() + ".jpg")); 
     Response.Write("A new image has been created!"); 
    } 
} 
Cuestiones relacionadas