전에, Google에서 Noto Sans 한글 글꼴이 배포되었다고 알린 적이 있었다. (http://yiunsr.tistory.com/699).  참고로 이 글꼴은 구글과 Adobe 가 같이 만들었는데, 구글에서는 Noto Sans 라고 부르고 Adobe에서는 본고딕이라고 부른다. 


이번에는 거기에 대응되는 Serif 글꼴이 나왔다.  https://developers-kr.googleblog.com/2017/04/noto-serif-cjk-is-here_4.html  이름하여 Noto Serif 이다. 역시 Adobe 와 같이 만들었다. (근데 실질적으로는 adobe가 다 한 것 같은데. ). Adobe 에서는 이 폰트 이름을 본명조라고 칭하고 있다. ( https://source.typekit.com/source-han-serif/kr/ ). 


이번에 나온 폰트도 Open Font License 이다. 


 이제, 고정폭 폰트(monospace font), 이탤릭을 대신하는 손글씨 세트가 더 나오면 정말 완전한 폰트세트가 될 것 같다. 





 


NanumGothicHangSimple.ttf

NanumGothicHangSimple.woff



NanumGothicHangSimple2.ttf

NanumGothicHangSimple2.woff




전 글에서 http://yiunsr.tistory.com/714  폰트를 줄이는 방법을 알아봤다.

그 상태에서 폰트 손실이 발생하지만 더 줄이는 방법이 있다. fontforge의 simplify 기능(https://fontforge.github.io/elementmenu.html#Simplify) 을 이용하면 glyph 모양이 달라지긴 하지만 더 용량이 줄어든다. Simplify 동작은 https://fontforge.github.io/pfaeditmath.html#Approximating 에 있는 것처럼 정보를 삭제하기 때문에 폰트 가독성이 떨어질 수 있다. 특히, 폰트 크기가 작을수록 더 심해질 것이다. 




#-*- coding: utf-8 -*-

import traceback


import fontforge;

import unicodedata2


def filtering_simple():

    try:

        print "== Open File =="

        font = fontforge.open("NanumGothicHang.ttf")

        for index in font :

            item = font[index]

            if item.unicode == -1:

                continue

            ch = unichr( item.encoding )

            if unicodedata2.script( ch ) not in ( 'Common', 'Latin', 'Hangul' ) :

                continue

            item = item.simplify()

            item = item.validate(True)

        flags  = ("opentype",  "apple")

        font.generate("NanumGothicHangSimple.ttf", flags=flags )

        font.generate("NanumGothicHangSimple.woff", flags=flags )

        print "== Close File =="

    except Exception as e:

        print traceback.format_exc() 

        

    return font


if __name__ == "__main__": 

    print "======== FF Start ========"

    filtering_simple()

    print "======== FF END ========"



위 과정을 거치고 지난 글 처럼 PS Glyph Name 제거하면 최종적으로 아래와 같이

줄어든다.





 NanumGothic.ttf

 원본 파일

 4.14MB 

 NanumGothicHang.ttf

일부 Character 제거 

 2.33MB

 NanumGothicHangSimple.ttf

 일부 Character 제거 + Simplify

 1.67MB

 NanumGothicHangSimple2.ttf

  일부 Character 제거 + Simplify

+ PS Glyph Name 제거

 1.52MB



 NanumGothic.woff

 원본 파일

 2.35MB 

 NanumGothicHang.woff

일부 Character 제거 

 1.01MB

 NanumGothicHangSimple.woff

 일부 Character 제거 + Simplify

 636KB

 NanumGothicHangSimple2.woff

  일부 Character 제거 + Simplify

+ PS Glyph Name 제거

 576KB



 폰트를 줄이기 위해서는 기술적인 문제외에도 라이센스문제도 따져봐야한다. 나눔폰트의 경우 OFL이기 때문에 폰트를 수정하는 것은 문제가 되지 않으나, 일반 상용폰트의 경우 구매를 한다고 해도 수정을 허용하지 않는 경우가 대부분이다. 따라서 폰트 라이센스도 꼭 확인이 필요하다. 






NanumGothicHang.ttf


NanumGothicHang.woff




NanumGothicHang2.ttf


NanumGothicHang2.woff




 기존 나눔고딕 폰트를 웹폰트로 사용하기에는 좀 파일이 크다는 단점이 있다.  한글이외의 다른 글자(이를테면 한자)를 빼면 파일을 줄일 수 있다고 생각되어어서 이 부분을 빼는 방법을 찾았다.  Fontforge에 embeded 한 Python 을 이용해서 불필요하다고 생각하는 부분을 제거할 수 있다. 

 Character 에 대해 어떤 언어인지 분석하기 위해서는 https://gist.github.com/anonymous/2204527 를 이용한다. 이를 이용해서 불필요한 언어의 폰트라고 생각하면 지워 버릴 수 있다. 


 아래는 그 예제이다. 

사용하는 유니코드 스크립트는 Common, Latin, Hangul 만 선택했다. Common 때문에 의외로 좀 불필요한 글자가 더 들어가는 느낌이 든다. 


이렇게 해서 TTF 폰트 기준으로 4.14MB 가 2.33MB로 줄어 들었다. woff 파일 기준으로는 

2.35MB에서 1.01MB로 줄어들었다. 


#-*- coding: utf-8 -*-

import traceback


import fontforge;

import unicodedata2


def filtering_hang():

    try:

        print "== Open File =="

        font = fontforge.open("NanumGothic.ttf")

        for index in font :

            item = font[index]

            if item.unicode == -1:

                continue

            ch = unichr( item.encoding )

            if unicodedata2.script( ch ) in ( 'Common', 'Latin', 'Hangul' ) :

                continue

            font.removeGlyph( item )

        flags  = ("opentype",  "apple")

        font.generate("NanumGothicHang.ttf", flags=flags )

        font.generate("NanumGothicHang.woff", flags=flags )

        print "== Close File =="

    except Exception as e:

        print traceback.format_exc() 

        

    return font


if __name__ == "__main__": 

    print "======== FF Start ========"

    filtering_hang()

    print "======== FF END ========"



 여기서 한 번 더 파일 크기를 줄일 수 있는데 이 폰트들을 Fontforge 에서 열어 File->Generate Fonts... 에서 저장시  뜨는  Generate Fonts 창에서  Options 버튼을 누르면 폰트 생성시 저장되는 정보를 선택할 수 있다. 이 화면에서 PS Glyph Name 부분을 체크 해제 해주고 저장하면 폰트크기를 더 줄일 수 있다. (물론 Truetype Hints 부분을 선택하면 파일 크기가 더 줄어 들기는 한다. 그런데 이 경우 폰트의 질이 떨어질 수 있다. )






 이 경우 폰트 새로운 ttf 파일은 2.18MB, woff 파일은 976KB 까지 줄어든다.


 더 이상 폰트 크기를 줄이기 위해서는 폰트 랜더링 정보를 지울경우 가능하다. 그 것에 대해서는 다음에 계속 테스트 하겠다.