Önceki makalede, CFF, TrueType ve Type1 yazı tiplerinin Java kullanılarak programlı olarak nasıl yükleneceğini gördünüz. Bugün, Java yazı tipi işleme API’mizin başka bir ilginç özelliğini tartışacağız - yazı tiplerini kullanarak metin oluşturma. Bu makalenin sonunda, Java uygulamalarınızdan TrueType ve Type1 yazı tiplerini kullanarak metin oluşturabileceksiniz. Haydi başlayalım.
- Java Font Manipülasyon API’sı Hakkında
- Metin Oluşturma Yöntemini Uygulayın
- Java’da TrueType Yazı Tiplerini Kullanarak Metni Oluşturun
- Java’da Type1 Yazı Tiplerini Kullanarak Metni Oluşturun
Java Yazı Tipi Düzenleme API’sı
Aspose.Font for Java size yazı tiplerini yükleme ve kaydetme özelliklerinin yanı sıra CFF, TrueType, OpenType ve Type1 gibi popüler yazı tipi türlerinin metriklerini alma özellikleri sunar. Ayrıca API, sağlanan TrueType veya Type1 yazı tiplerini kullanarak metni oluşturmanıza olanak tanır. API’yi Maven yapılandırmalarını kullanarak yükleyebilir veya API’nin JAR’ını indirebilirsiniz.
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-font</artifactId>
<version>20.10</version>
</dependency>
Metin Oluşturma Yöntemini Uygulayın
Metni oluşturmak için Aspose.Font for Java, sağlanan metni çizecek olan drawText() yöntemini uygulamanızı gerektirir. DrawText() yönteminin tam tanımı aşağıdadır.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-Java adresine gidin.
static void drawText(String text, IFont font, double fontSize,
Paint backgroundBrush, Paint textBrush, String outFile) throws Exception
{
//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.getEncoding().decodeToGid(text.charAt(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
BufferedImage outBitmap = new BufferedImage(960, 720, BufferedImage.TYPE_INT_BGR);
//outBitmap.getRaster().SetResolution((float)dpi, (float)dpi);
java.awt.Graphics2D outGraphics = (java.awt.Graphics2D) outBitmap.getGraphics();
outGraphics.setPaint(backgroundBrush);
outGraphics.fillRect(0, 0, outBitmap.getWidth(), outBitmap.getHeight());
outGraphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
//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ü
for (GlyphId gid : gids)
{
// yazı tipi g'yi içeriyorsa
if (gid != null)
{
Glyph glyph = font.getGlyphAccessor().getGlyphById(gid);
if (glyph == null)
continue;
// çizim talimatlarını kabul eden yol
GeneralPath path = new GeneralPath();
// IGlyphOutlinePainter uygulaması oluşturma
GlyphOutlinePainter outlinePainter = new GlyphOutlinePainter(path);
// İşleyiciyi oluştur
IGlyphRenderer renderer = new GlyphOutlineRenderer(outlinePainter);
// ortak glif özelliklerini al
double kerning = 0;
// karakter aralığı değerini al
if (previousGid != null)
{
kerning = (font.getMetrics().getKerningValue(previousGid, gid) /
glyph.getSourceResolution()) * fontSize * resolutionCorrection;
kerning += fontWidthToImageWdith(font.getMetrics().getGlyphWidth(previousGid),
glyph.getSourceResolution(), fontSize, 300);
}
// 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.setWindingRule(GeneralPath.WIND_NON_ZERO);
outGraphics.setPaint(textBrush);
outGraphics.fill(path);
}
//sonraki glif için doğru karakter aralığını elde etmek için mevcut gid'i önceki olarak ayarlayın
previousGid = gid;
}
//Sonuçları kaydet
ImageIO.write(outBitmap, "jpg", new File(outFile));
}
Aşağıda, bitmap koordinat sistemi için glif genişliğini hesaplamak için kullanılan bir yardımcı program yöntemi yer almaktadır.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-Java adresine gidin.
static double fontWidthToImageWidth(double width, int fontSourceResulution, double fontSize, double dpi)
{
double resolutionCorrection = dpi / 72; // 72 is font's internal dpi
return (width / fontSourceResulution) * fontSize * resolutionCorrection;
}
Metni Java’da Yazı Tipiyle Oluşturma Adımları
Aşağıda, yukarıda belirtilen darwText() yöntemi kullanılarak belirtilen bir metnin bir görüntü dosyası olarak nasıl oluşturulacağı adımları yer almaktadır.
- FontDefinition sınıfını kullanarak yazı tipini yükleyin.
- Type1Font veya TtfFont gibi sınıfı kullanarak yazı tipine erişin.
- Ayrıntıları parametreleri biçiminde sağlayarak drawText() yöntemini çağırın.
Java kullanarak TrueType Yazı Tipi ile Metni Oluşturun
Aşağıdaki kod örneği, bir TrueType yazı tipi kullanarak metni işlemek için drawText() yönteminin nasıl kullanılacağını gösterir. Oluşturma sonuçları bir JPEG görüntüsü olarak oluşturulacaktır.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-Java adresine gidin.
String fileName1 = Utils.getDataDir() + "Montserrat-Bold.ttf"; //Font file name with full path
FontDefinition fd1 = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName1)));
TtfFont font1 = (TtfFont) Font.open(fd1);
String fileName2 = Utils.getDataDir() + "Lora-Bold.ttf"; //Font file name with full path
FontDefinition fd2 = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName2)));
TtfFont font2 = (TtfFont) Font.open(fd2);
try {
drawText("Hello world", font1, 14, java.awt.Color.WHITE, java.awt.Color.BLACK, Utils.getDataDir() + "hello1_montserrat_out.jpg");
drawText("Hello world", font2, 14, java.awt.Color.YELLOW, java.awt.Color.RED, Utils.getDataDir() + "hello2_lora_out.jpg");
} catch (Exception ex) {
ex.printStackTrace();
}
Java’da Type1 Yazı Tiplerini Kullanarak Metni Oluşturun
Aşağıdaki kod örneği, Java kullanarak bir Type1 yazı tipiyle bir JPEG görüntüsüne metin oluşturmayı gösterir.
// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-Java adresine gidin.
String fileName = Utils.getDataDir() + "courier.pfb"; //Font file name with full path
FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
Type1Font font = (Type1Font) Font.open(fd);
try {
drawText("Hello world", font, 14, java.awt.Color.WHITE, java.awt.Color.BLACK, Utils.getDataDir() + "hello1_type1_out.jpg");
drawText("Hello world", font, 14, java.awt.Color.YELLOW, java.awt.Color.RED, Utils.getDataDir() + "hello2_type1_out.jpg");
} catch (Exception ex) {
ex.printStackTrace();
}
Çözüm
Bu makalede, Java uygulamalarının içinden TrueType veya Type1 yazı tipini kullanarak metni JPEG görüntüler olarak nasıl işleyeceğinizi gördünüz. Java yazı tipi işleme API’si hakkında daha fazla bilgi edinmek için belgeleri ziyaret edebilir ve kaynak kodu örneklerini kullanarak API’nin özelliklerini değerlendirebilirsiniz.