otf 또는 ttf 파일에서 글꼴 이름을 어떻게 얻습니까?


83

이전 앱에서 사용자 지정 글꼴을 사용했습니다.

파일 이름은 "ProximaNova-Regular.otf"였고 방금 사용한 글꼴을로드하기 위해 ...

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

이것은 완벽하게 작동했습니다.

이제이 새로운 앱에는 세 개의 글꼴 파일이 있습니다.

Dude_Willie.otf
Impact
handsean.ttf

하지만 어떻게로드해야할지 모르겠습니다.

나는 시도했다

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

그러나 이것은 Helvetica를 사용하는 것으로 돌아갑니다.

사용할 이름을 어떻게 찾을 수 있습니까?




@FyodorVolchyok 아. 댓글을보세요. 나는 이미 그 질문을 무시했습니다. 내가 가진 문제는 프로젝트에 글꼴을 제대로 설치 familyNames하지 않았기 때문에 목록에 내가 찾고 있던 글꼴이 실제로 표시되지 않는다는 것입니다.
Fogmeister

unix.stackexchange.com/q/26053/26227 - fc-scan --format "%{foundry}: %{family}\n" filename.ttffilename.otf.
Dave Jarvis

답변:


89

iOS 앱에서 새 글꼴을 추가하고 사용하려면 다음 네 가지 간단한 단계를 따르십시오.

  • your_new_font.ttf 또는 your_new_font.otf 를 Xcode 프로젝트에 추가하십시오.
  • 프로젝트의 info.plist에서 your_new_font.ttf 또는 your_new_font.otf 에 대한 새 항목을 UIAppFonts배열에 추가하십시오 (이 항목의 일반 텍스트는 '응용 프로그램에서 제공하는 글꼴'입니다).
  • 이 시점에서 새로 추가 된 your_new_font를 포함하여 앱에서 액세스 할 수있는 모든 글꼴을 덤프하려면이 임시 디버그 코드를 추가하는 것이 좋습니다.

//빠른

    for family: String in UIFont.familyNames {
        print("\(family)")
        for names: String in UIFont.fontNames(forFamilyName: family) {
            print("== \(names)")
        }
    }

// 목표 -c

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]비즈니스에 있어야합니다!

124

TTF를 마우스 오른쪽 버튼으로 클릭-> 정보 입수

"전체 이름"은 당신이 찾고있는 것입니다.

그것이 TTF와 함께 저에게 효과적이었습니다.

편집하다:

정보 입수의 "전체 이름"과 다른 이름을 가진 글꼴을 사용했습니다.

이 답변의 컴파일을 위해 위의 빠른 확인이 작동하지 않으면 프로젝트에서 다음 코드를 실행하십시오.

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

글꼴 제작자에 따라 다릅니다. 클라이언트로부터받은 끔찍한 글꼴이 있었고 글꼴 이름은 iOS에서 사용되면 심각하게 임의적입니다. 우리 글꼴 중 하나를 사용하여이 방법을 시도했지만 실패했습니다.
borrrden 2013 년

@borrrden 지금 까지이 방법은 매번 나를 위해 일했습니다. 나는 내 자신이 글꼴을 만들지 않았으므로 당신이 옳을 수도 있습니다.
Segev

잘 만들어진 글꼴에서 작동 할 가능성이 높습니다. 우리가 얻은 글꼴은 약 20 년 전에 만들어졌습니다 (나쁜 ...). 그러나 확인하는 유일한 방법은 시스템에 문의하는 것입니다.
borrrden 2013 년

3
감사합니다. info.plist 파일에 글꼴을 제대로 설치 한 후에 작동했습니다.
Fogmeister 2013 년

6
이것은 모든 글꼴에서 작동하지 않습니다. 예를 들어 코드의 제품군이 "ProximaNova-Regular"인 경우 "Full Name"값은 "Proxima Nova Regular"로 표시됩니다.
rrbrambley

59
  • 글꼴 설치
  • Mac에서 서체 관리자 앱 열기
  • 글꼴을 선택하고 '정보'버튼을 클릭하십시오.
  • 찾고있는 이름은 PostScript 이름입니다.
    • MacOS :보기-> 글꼴 정보 표시

예


5
가장 간단한 방법처럼 보인다
Eyal 님 Alsheich

8
fwiw, 자세한 내용을 보려면보기> 글꼴 정보 표시로 이동해야했습니다. 내 컴퓨터에서 기본적으로 꺼져있는 이유를 모르겠습니다.
Mark Robson

41

iOS에서 글꼴을 사용하려면 글꼴의 FULL NAME (포스트 스크립트 이름)을 기반으로 글꼴을로드해야합니다 . 이는 글꼴의 실제 FILE NAME 과 때때로 (일반적으로) 다릅니다 .

글꼴 파일 "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디렉터리에서 실행되는 위 명령의 스크린 샷입니다 .

여기에 이미지 설명 입력

위의 스크립트 는 현재 디렉토리의 모든 .ttf.otf파일을 통해 실행 된 다음 XCode 또는 다른 곳에서 글꼴 파일을 참조하는 데 사용할 수있는 각 글꼴에 대한 PostScript 이름 을 인쇄합니다 .

추가 정보 (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

여기에 이미지 설명 입력

이 방법은 AppDelegate.m 파일 내부에 코드를 복사하여 붙여 넣는 것보다 약간 빠르며 새 글꼴 파일을 추가 할 때마다 이름을 인쇄합니다.이 방법은 널리 사용되며 FontBook에서 글꼴을 여는 것보다 빠릅니다. PostScript 이름을 검사하십시오.

유용한 팁 : 터미널에서 위의 스크립트를 별칭으로 지정하면 현재 디렉터리의 모든 파일에 대한 모든 PostScript 글꼴 이름을 가져 오는 단일 명령을 입력하기 만하면됩니다 (내 함수가 호출 fontnames되므로해야 할 모든 작업 fontnames글꼴이있는 디렉토리 내부의 터미널에 입력 하면 PostScript 이름이 자동으로 인쇄됩니다. 그러면 개발 워크 플로에서 시간을 절약하고 필요할 때이 편리한 스크립트를 사용할 수 있습니다.

도움이 되었기를 바랍니다!


Mac을 사용하고 있습니다. 제공된 링크에서 fontConfig를 다운로드했습니다. 하지만 파일이 너무 많습니다. 어떻게 사용하거나 내 Mac에 fontConfig를 설치합니까?
Sujay UN

@SujayUN Mac을 사용하는 경우 fc-scan유틸리티 가 이미 설치되어 있을 수 있습니다 . fc-scan -V터미널에서 실행 하면 어떻게 되나요?
라디오 비주얼

3
homebrew 를 통해 fontConfig를 설치할 수도 있습니다 .brew install fontconfig .
라디오 비주얼

ur cmd -bash : fc-scan : command not found를 실행하면이 메시지가 나타납니다.
Sujay UN

좋습니다. 컴퓨터에 설치되어 있지 않은 경우 Homebrew를 통해 설치하는 것이 좋습니다. 위의 내 의견에 Homebrew 및 설치 명령에 대한 링크를 참조하십시오.
라디오 비주얼

6

이름을 얻는 방법을 알고 싶습니다.

  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

프로그래밍 방식으로 지정된 글꼴 파일의 글꼴 이름을 찾으려면 다음을 수행하십시오.

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필요에 따라 던질 수있는 물체로 교체하십시오 .


5

스위프트 3.0

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

5

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


4

프로젝트 / 앱에 글꼴을 추가 한 후 앱에 사용 가능한 모든 글꼴을 인쇄하기 위해이 코드를 추가합니다 (아마도 앱 위임 didFinishLaunchingWithOptions 메서드에 있음). 해당 목록에서 원하는 글꼴을 식별 할 수 있어야합니다. 나중에 불필요한 코드를 제거하는 것을 잊지 마십시오.

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

4

otfinfo --info arial.ttf를 사용하여 명령 줄에서 이름을 가져올 수도 있습니다. 포스트 스크립트 이름은 UIFont 생성자에 전달해야하는 이름입니다.


3

스위프트 1.2 :

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

2

에뮬레이터 또는 장치에 존재하는 모든 기본 글꼴을 스캔하지 않는 또 다른 "빠르고 실용적인"해킹은 storyboard. 그런 다음 텍스트 편집기 (으로 열기)로 스토리 보드를 편집하는 source code경우 "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

글꼴 파일의 familyNames를 기록한 다음 글꼴에 액세스합니다.

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

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

도움이 되었기를 바랍니다.


작동하지 않는 것 같습니다. 파일 이름이 글꼴 패밀리 이름과 다른 경우 실패합니다
Blitz

정보 얻기에서 글꼴 이름을 가져와야합니다.
Nishant Tyagi 2014

0

에 대한 목록의 글꼴 이름과 가족 맥 OS스위프트 4.1 :

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

-2

Swift 4.0 지원

이것은 모든 글꼴 패밀리를 인쇄하기위한 한 줄 코드이며 글꼴 이름입니다.

override func viewDidLoad() {
    super.viewDidLoad()
    //Main line of code
    UIFont.familyNames.sorted().forEach({ print($0); UIFont.fontNames(forFamilyName: $0 as String).forEach({print($0)})})
}

질문을 읽으십시오.
Fogmeister

@Fogmeister 당신의 대답은 다음과 같습니다. 그래서
제가이

이 줄은 TTF 나 OTF 파일을 읽고 다음 글꼴 가족을 제공하며 모든 글꼴 이름입니다 .. @Fogmeister
NiravS

받아 들여진 답이 당신의 답과 같으면 ... 왜이 답을 쓰나요? 이미 존재하는 것을 편집하십시오 (편집 버튼의 용도입니다). 사소하고 사소한 변경 사항에 대한 답변을 복사하여 다른 사람의 담당자 점수를 훔치려 고하지 마십시오. 이제 수락 된 질문을 글꼴을 올바르게 설치하는 방법을 보여주는 최신 질문으로 변경했습니다. 감사합니다
Fogmeister

또한 대답은 "단지 코드 한 줄"이지만 거의 읽을 수 없습니다. 나는 그것이 무엇을하는지보기 위해 쉽게 스캔 할 수있는 여러 줄이있는 답변을 선호합니다.
Fogmeister
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.