【问题标题】:Using custom TTF font for DrawString image rendering使用自定义 TTF 字体进行 DrawString 图像渲染
【发布时间】:2010-10-06 02:42:42
【问题描述】:

我在服务器端使用 GDI+ 创建一个流式传输到用户浏览器的图像。没有一个标准字体符合我的要求,所以我想加载一个 TrueType 字体并使用此字体将我的字符串绘制到图形对象:

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 表示服务器上没有安装的字体,但我有它的 TTF 文件。

如何加载 TTF 文件以便在 GDI+ 字符串渲染中使用它?

【问题讨论】:

    标签: c# .net fonts gdi+ drawstring


    【解决方案1】:

    我找到了使用自定义字体的解决方案。

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

    现在 myCustomFont 可以按预期与 Graphics.DrawString 方法一起使用。

    【讨论】:

      【解决方案2】:

      只是为了给出更完整的解决方案

      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!");
          } 
      }
      

      【讨论】:

        猜你喜欢
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 2014-12-14
        • 2013-01-26
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        相关资源
        最近更新 更多