Press ESC to close

imagemagick unable to read font hatası ve çözümü

Merhaba, .net core 7 üzerinde çalışan ve Magick.NET kütüphanesini kullandığımız bir projemizde unable to read font hatası alıyoruz. Hadi hatanın detayını ve çözüm yollarını birlikte araştıralım. Bakalım çözebilecek miyiz ? 🙂

Prod ortamında sorunsuz çalışan bir projemizde bugün başlıkta yer alan hata ile karşılaştım.

Hatayı araştırdığımda belirtilen font’un sistem üzerinde yer almadığı bu sebeple de exception fırlattığını öğrendim. Problemi macos ortamında yaşıyordum, windows üzerinde geliştirme yapan arkadaşlarım herhangi bir hata ile karşılaşmazken ben ilgili sayfayı exception sebebiyle görüntüleyemiyordum bile. Çalıştırmaya çalıştığım kod şu şekildeydi;

var txt = new Drawables()
                .FillColor(MagickColors.White)
                .FontPointSize(24)
                .Font("Arial-Bold-Italic", FontStyleType.Normal, FontWeight.Bold, FontStretch.Normal)
                .TextAlignment(TextAlignment.Left)
                .Text(2, 19, value)
                .Draw(magickImage);

System fontlarını kontrol ettiğimde ismini belirttiğim font yüklüydü ve sorunsuz çalışıyordu. Problemin çözümü için font adını mac ortamındaki font yolu ile değiştirdiğimde sorun düzeldi.

/Users/mehmetistanbullu/Library/Fonts/FontsFree-Net-arial-bold.ttf

Fakat tabi ki bu en iyi çözüm değil. Çünkü bu kodu push etmem durumunda projede görev alan diğer arkadaşlarım sorun yaşayacaktı. Bunu önlemek için araştırma yaptığımda, font dosyasını proje altına eklememizi ve magick image kütüphanesine font yolunu vermemiz tavsiye ediliyordu. Proje altına font klasörü ekledim ve font parametresini aşağıdaki gibi düzenledim. İçin rahat bir şekilde kodumu push edebilirim.

var txt = new Drawables()
                .FillColor(MagickColors.White)
                .FontPointSize(24)
                .Font(Path.Combine("Fonts", "FontsFree-Net-arial-bold.ttf"), FontStyleType.Normal, FontWeight.Bold,
                    FontStretch.Normal)
                .TextAlignment(TextAlignment.Left)
                .Text(2, 19, value)
                .Draw(magickImage);

Peki, size soruyorum; Neden dosya yolunu “~/Fonts/FontsFree-Net-arial-bold.ttf” şeklinde kullanmak yerine Path.Combine(“Fonts”, “FontsFree-Net-arial-bold.ttf”) şeklinde kullandım ? Yorumlarınızı bekliyorum.

Kaynaklar:
https://imagemagick.org/discourse-server/viewtopic.php?t=24453

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir