web-dev-qa-db-ja.com

otfまたはttfファイルからフォント名を取得するにはどうすればよいですか?

以前のアプリでカスタムフォントを使用しました。

ファイル名は「ProximaNova-Regular.otf」で、使用したフォントをロードします...

[UIFont fontWithName:@"ProximaNova-Regular" size:20];

これは完全に機能しました。

この新しいアプリには3つのフォントファイルがあります...

Dude_Willie.otf
Impact
handsean.ttf

しかし、私はこれらをロードする方法がわかりません。

私が試してみました

[UIFont fontWithName:<the file name> size:20];

しかし、これはHelveticaを使用することにフォールバックします。

使用する名前を見つけるにはどうすればよいですか?

72
Fogmeister

次の4つの簡単な手順に従って、iOSアプリに新しいフォントを追加して使用します。

  • Xcodeプロジェクトにyour_new_font.ttfまたはyour_new_font.otfを追加します
  • プロジェクトのinfo.plistで、your_new_font.ttfまたはyour_new_font.otfの新しいエントリをUIAppFonts配列に追加します(このプレーンテキストは 'アプリケーションが提供するフォント ')
  • この時点で、新しく追加されたyour_new_fontを含め、アプリからアクセス可能なすべてのフォントをダンプするために、この一時的なデバッグコードを追加することをお勧めします。
for(NSString *fontfamilyname in [UIFont familyNames])
{
    NSLog(@"family:'%@'",fontfamilyname);
    for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname])
    {
        NSLog(@"\tfont:'%@'",fontName);
    }
    NSLog(@"-------------");
}
  • デバッグ出力で、新しいフォントの「ファミリ」と「フォント」の名前を探します。新しいフォントファミリーに対応する「フォント」名として表示されるもの(新しいフォント「ファミリー」に関連付けられた「フォント」が複数ある場合があります)をUIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]そして、あなたはビジネスをするべきです!
60
John Jacecko

TTFを右クリック->情報を取得

「フルネーム」はあなたが探しているものです。

それがTTFで私にとってうまくいったことです。

編集:

Get Infoの「Full Name」とは異なる名前のフォントを使用しました。

この回答をコンパイルするには、上記のクイックチェックが機能しない場合、プロジェクトで次のコードを実行します。

for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}

そして、使用したいフォントの正しい名前を検索します。

Swift 3.0コード:

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)")
    }
}
116
Segev
  • フォントをインストールする
  • MacでFont Bookアプリを開く
  • フォントを選択し、「情報」ボタンをクリックします
  • 探している名前はPostScript名

example

41
Elin Gersin

iOSでフォントを使用するには、フォントのFULL NAME(PostScript Name)に基づいてフォントをロードする必要があります。 is)フォントの実際のファイル名とは異なります。

Fontファイル「Arial-regular.ttf」の名前を「foo.ttf」に変更することを想像してください。名前を変更したフォントファイル内に含まれるフォントは、「Arial-regular」のままです。

このスレッドで既にフォント名を取得するためのいくつかの優れたプログラム的な方法がありますが、コマンドラインを使用した別のアプローチがあります。

MacまたはLinuxを使用している場合、カスタムフォントがあるディレクトリのコマンドラインからこのスクリプトを実行します(既にインストールされている fontconfigfc-scanユーティリティを使用します。しかし、そうでない場合は、homebrew経由でインストールできます:brew install fontconfig):

for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done

~/Library/Fontsディレクトリで実行されている上記のコマンドのスクリーンショットは次のとおりです。

enter image description here

上記のスクリプトは、現在のディレクトリにあるすべての.ttfおよび.otfファイルを実行し、PostScript Nameを出力しますXCodeまたは他の場所でフォントファイルを参照するために使用できる各フォント。

いくつかの追加情報(PostScriptName、Filename)といくつかの色分けを使いたい場合は、次の代替スクリプトを実行できます。

for file in "$arg"*.{ttf,otf}; do 
    postscriptname=$(fc-scan --format "%{postscriptname}\n" $file);
    printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file";
done

enter image description here

これは、新しいフォントファイルを追加するたびに名前を印刷するAppDelegate.mファイル内にコードをコピーアンドペーストするよりも少し高速です。これは一般的な方法であり、FontBookのFontを開くよりも高速です。 PostScript名を調べます。

便利なヒント:ターミナルで上記のスクリプトをエイリアス化して、すべてのPostScriptフォント名を取得する単一のコマンドを入力するだけでよい場合現在のディレクトリ内のすべてのファイル(私の関数はfontnamesと呼ばれるため、フォントを含むディレクトリ内のターミナルでfontnamesと入力するだけで、PostScript名が出力されます。自動的に、開発ワークフローの時間を節約し、この便利なスクリプトを必要なときにすぐに使用できるようにします。

お役に立てれば!

32
radiovisual

このために名前を取得する方法を知りたい:-

  NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];

  for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily) 
  {
        NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);

        NSArray *fontNames = [[NSArray alloc] initWithArray:
              [UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];

        for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont) 
        {
              NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
        }
  }

それがあなたを助けることを願っています...

6

Swift 3.0

for familyName in UIFont.familyNames {
        for fontName in UIFont.fontNames(forFamilyName: familyName ) {
            print("\(familyName) : \(fontName)")
        }
    }
5
Sekhar22

Swift 4.0 +ソリューション

    for fontFamilyName in UIFont.familyNames {
        print("family: \(fontFamilyName)\n")

        for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
            print("font: \(fontName)")
        }
    }

出力されます:

ファミリー:Apple SD Gothic Neo

フォント:AppleSDGothicNeo-Thin

フォント:AppleSDGothicNeo-Light

5
JaredH

プロジェクト/アプリにフォントを追加した後、アプリで利用可能なすべてのフォントを印刷するために、このコードを追加します(おそらくアプリデリゲートdidFinishLaunchingWithOptionsメソッドに追加します)。そのリストから、目的のフォントを識別できるはずです。その後、不要なコードを削除することを忘れないでください。

for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}
4
Oliver Pearmain

特定のフォントファイルのフォント名をプログラムで検索する場合:

import Foundation

func loadFontName(for file: URL) throws -> String {
    let data = try Data(contentsOf: file)

    guard let provider = CGDataProvider(data: data as CFData) else {
        throw Error("Could not create data provider")
    }

    guard let font = CGFont(provider) else {
        throw Error("Could not load font")
    }

    guard let name = font.postScriptName else {
        throw Error("Could not get font name from font file")
    }

    return name as String
}

必要に応じて、独自のスロー可能Errorオブジェクトに置き換えます。

4
Robert

Swift 1.2:

    for familyName in UIFont.familyNames() {
        for fontName in UIFont.fontNamesForFamilyName(familyName as! String) {
            println("\(familyName) : \(fontName)")
        }
    }
3
Harry Ng

Otfinfo --info arial.ttfを使用して、コマンドラインから名前を取得することもできます。ポストスクリプト名は、UIFontコンストラクターに渡す必要がある名前です。

2
Moritz

フォントファイルのfamilyNamesをログに記録してから、フォントにアクセスします。

// You can log all font family names suing **fontNamesForFamilyName**

NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);

お役に立てば幸いです。

1
Nishant Tyagi

エミュレーターまたはデバイスのいずれかに存在するすべてのデフォルトフォントをスキャンする必要のないもう1つの「迅速で実用的な」ハックは、ストーリーボードの何かにフォントを使用することです。テキストエディタでストーリーボードを編集する場合、「customFonts」タグを検索すると、「内部」名で使用されているフォントを確認できます。

<customFonts key="customFonts">
    <array key="Linotype - AvenirNextLTPro-Bold.otf">
        <string>AvenirNextLTPro-Bold</string>
    </array>
    <array key="Linotype - AvenirNextLTPro-Regular.otf">
        <string>AvenirNextLTPro-Regular</string>
    </array>
    <array key="TradeGothicLTPro-BdCn20.otf">
        <string>TradeGothicLTPro-BdCn20</string>
    </array>
</customFonts>
1
Kaolin Fire

macOSSwift 4.1のフォント名とファミリを一覧表示します:

NSFontManager.shared.availableFonts.map { print($0) }
NSFontManager.shared.availableFontFamilies.map { print($0) }
0
Ben Stahl