Önceki gönderide, CFF, TrueType ve [Type1] yüklemek ve kaydetmek için Aspose.Font for .NET API’sinin nasıl kullanıldığını gördünüz. 5 yazı tiplerini programlı olarak. Bu makalede, C# kullanarak TrueType ve Type1 yazı tipiyle metin oluşturmayı öğreneceksiniz. Kod örnekleri, sağlanan metne dayalı olarak bir JPG görüntüsünün nasıl oluşturulacağını gösterecektir.
- .NET Yazı Tipi İşleme API’si - Kurulum
- Metin Oluşturma Arayüzünü Uygulayın
- C# kullanarak TrueType Yazı Tipi ile Metni Oluşturun
- C# kullanarak Type1 Yazı Tipi ile Metni Oluşturun
.NET Yazı Tipi İşleme API’si - Kurulum
Aspose.Font for .NET, metni TrueType ve Type1 yazı tiplerini kullanarak işlemek için güçlü bir yazı tipi oluşturma mekanizması sağlar. API’yi indirebilir veya NuGet kullanarak kurulumunu sağlayabilirsiniz.
PM> Install-Package Aspose.Font
Metin Oluşturma Arayüzünü Uygulayın
Aspose.Font for .NET, metin işlemeyi gerçekleştirmek için glifleri çizmek için bir IGlyphOutlinePainter arabirimi sağlar. Aşağıdaki adımlar, yöntemlerin IGlyphOutlinePainter’da nasıl uygulanacağını gösterir.
- Grafik çizmek için System.Drawing.Drawing2D.GraphicsPath türünde bir nesne gerektiren GlyphOutlinePainter sınıfını kullanarak IGlyphOutlinePainter arabirim yöntemlerini uygulayın.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-.NET adresine gidin.
class GlyphOutlinePainter : IGlyphOutlinePainter
{
private System.Drawing.Drawing2D.GraphicsPath _path;
private System.Drawing.PointF _currentPoint;
public GlyphOutlinePainter(System.Drawing.Drawing2D.GraphicsPath path)
{
_path = path;
}
public void MoveTo(MoveTo moveTo)
{
_path.CloseFigure();
_currentPoint.X = (float)moveTo.X;
_currentPoint.Y = (float)moveTo.Y;
}
public void LineTo(LineTo lineTo)
{
float x = (float)lineTo.X;
float y = (float)lineTo.Y;
_path.AddLine(_currentPoint.X, _currentPoint.Y, x, y);
_currentPoint.X = x;
_currentPoint.Y = y;
}
public void CurveTo(CurveTo curveTo)
{
float x3 = (float)curveTo.X3;
float y3 = (float)curveTo.Y3;
_path.AddBezier(
_currentPoint.X,
_currentPoint.Y,
(float)curveTo.X1,
(float)curveTo.Y1,
(float)curveTo.X2,
(float)curveTo.Y2,
x3,
y3);
_currentPoint.X = x3;
_currentPoint.Y = y3;
}
public void ClosePath()
{
_path.CloseFigure();
}
}
- Metni System.Drawing.Bitmap nesnesine çizmek için yeni bir DrawText() yöntemi oluşturun.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-.NET adresine gidin.
static void DrawText(string text, IFont font, double fontSize,
Brush backgroundBrush, Brush textBrush, string outFile)
{
//Metin satırındaki her sembol için glif tanımlayıcıları alın
GlyphId[] gids = new GlyphId[text.Length];
for (int i = 0; i < text.Length; i++)
gids[i] = font.Encoding.DecodeToGid(text[i]);
// ortak çizim ayarlarını yap
double dpi = 300;
double resolutionCorrection = dpi / 72; // 72 is font's internal dpi
// çıktı bit eşlemi hazırla
Bitmap outBitmap = new Bitmap(960, 720);
outBitmap.SetResolution((float)dpi, (float)dpi);
Graphics outGraphics = Graphics.FromImage(outBitmap);
outGraphics.FillRectangle(backgroundBrush, 0, 0, outBitmap.Width, outBitmap.Height);
outGraphics.SmoothingMode = SmoothingMode.HighQuality;
//koordinat değişkenlerini ve önceki gid'i bildir
GlyphId previousGid = null;
double glyphXCoordinate = 0;
double glyphYCoordinate = fontSize * resolutionCorrection;
//gids'deki her glifi boyayan döngü
foreach (GlyphId gid in gids)
{
// yazı tipi g'yi içeriyorsa
if (gid != null)
{
Glyph glyph = font.GlyphAccessor.GetGlyphById(gid);
if (glyph == null)
continue;
// çizim talimatlarını kabul eden yol
GraphicsPath path = new GraphicsPath();
// IGlyphOutlinePainter uygulaması oluşturma
GlyphOutlinePainter outlinePainter = new GlyphOutlinePainter(path);
// İşleyiciyi oluştur
Aspose.Font.Renderers.IGlyphRenderer renderer = new
Aspose.Font.Renderers.GlyphOutlineRenderer(outlinePainter);
// ortak glif özelliklerini al
double kerning = 0;
// karakter aralığı değerini al
if (previousGid != null)
{
kerning = (font.Metrics.GetKerningValue(previousGid, gid) /
glyph.SourceResolution) * fontSize * resolutionCorrection;
kerning += FontWidthToImageWith(font.Metrics.GetGlyphWidth(previousGid),
glyph.SourceResolution, fontSize);
}
// glif konumlandırma - karakter aralığı mesafesine göre glif X koordinatını artırın
glyphXCoordinate += kerning;
// Glif yerleştirme matrisi
TransformationMatrix glyphMatrix =
new TransformationMatrix(
new double[]
{
fontSize*resolutionCorrection,
0,
0,
// bitmap koordinat sistemi üstten başladığı için negatif
- fontSize*resolutionCorrection,
glyphXCoordinate,
glyphYCoordinate
});
// geçerli glifi oluştur
renderer.RenderGlyph(font, gid, glyphMatrix);
// yolu doldur
path.FillMode = FillMode.Winding;
outGraphics.FillPath(textBrush, path);
}
//sonraki glif için doğru karakter aralığını elde etmek için geçerli gid'i önceki olarak ayarlayın
previousGid = gid;
}
//Sonuçları kaydet
outBitmap.Save(outFile);
}
- Yazı tipinin genişliğini görüntünün genişliğine göre hesaplamak için bir yardımcı yöntem tanımlayın.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-.NET adresine gidin.
static double FontWidthToImageWith(double width, int fontSourceResulution, double fontSize, double dpi = 300)
{
double resolutionCorrection = dpi / 72; // 72 is font's internal dpi
return (width / fontSourceResulution) * fontSize * resolutionCorrection;
}
C# kullanarak TrueType Yazı Tipi ile Metni Oluşturun
Aşağıdaki kod örneği, C# kullanarak bir TrueType yazı tipiyle metni işlemek için yukarıda belirtilen uygulamanın nasıl kullanılacağını gösterir.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-.NET adresine gidin.
string dataDir = RunExamples.GetDataDir_Data();
string fileName1 = dataDir + "Montserrat-Bold.ttf"; //Font file name with full path
FontDefinition fd1 = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName1)));
TtfFont ttfFont1 = Aspose.Font.Font.Open(fd1) as TtfFont;
string fileName2 = dataDir + "Lora-Bold.ttf"; //Font file name with full path
FontDefinition fd2 = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName2)));
TtfFont ttfFont2 = Aspose.Font.Font.Open(fd2) as TtfFont;
DrawText("Hello world", ttfFont1, 14, Brushes.White, Brushes.Black, dataDir + "hello1_montserrat_out.jpg");
DrawText("Hello world", ttfFont2, 14, Brushes.Yellow, Brushes.Red, dataDir + "hello2_lora_out.jpg");
C# kullanarak Type1 Yazı Tipi ile Metni Oluşturun
Aşağıdaki kod örneği, C# kullanarak bir Type1 yazı tipiyle metnin nasıl oluşturulacağını gösterir.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-.NET adresine gidin.
string fileName = dataDir + "courier.pfb"; //Font file name with full path
FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
Type1Font font = Aspose.Font.Font.Open(fd) as Type1Font;
DrawText("Hello world", font, 14, Brushes.White, Brushes.Black, dataDir + "hello1_type1_out.jpg");
DrawText("Hello world", font, 14, Brushes.Yellow, Brushes.Red, dataDir + "hello2_type1_out.jpg");
Çözüm
Bu makalede, C# kullanarak bir TrueType veya Type1 yazı tipiyle metnin işlenmesini nasıl uygulayacağınızı öğrendiniz. Kod örnekleri, sağlanan metne dayalı olarak JPG görüntülerinin nasıl oluşturulacağını göstermiştir. Belgeleri kullanarak Aspose.Font for .NET hakkında daha fazlasını keşfedebilirsiniz.