2009-02-07 33 views
15

Tôi đang sử dụng GDI + ở phía máy chủ để tạo hình ảnh được truyền tới trình duyệt của người dùng. Không ai trong số các phông chữ tiêu chuẩn phù hợp với yêu cầu của tôi và vì vậy tôi muốn tải một phông chữ TrueType và sử dụng font chữ này để vẽ các chuỗi của tôi với đồ họa phản đối:Sử dụng phông chữ TTF tùy chỉnh để vẽ hình ảnh 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 đại diện cho một phông chữ không được cài đặt trên máy chủ, nhưng mà tôi có tệp TTF.

Làm cách nào để tải tệp TTF để tôi có thể sử dụng tệp đó trong kết xuất chuỗi GDI +?

Trả lời

31

Tôi đã tìm thấy giải pháp để sử dụng phông chữ tùy chỉnh.

// '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); 

Bây giờ myCustomFont có thể được sử dụng với phương pháp Graphics.DrawString như dự định.

14

Chỉ cần cung cấp giải pháp hoàn chỉnh hơn

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!"); 
    } 
} 
Các vấn đề liên quan