일본어 글꼴의 OpenType 기능의 서브셋 유지

결론: 사용pyftsubset --layout-features='*'

날과 씨


처음에는 Noto Sans CJK JP를 웹 글꼴로 사용하기 위해 서브집합화하려고 했지만 제대로 진행되지 않았다.즉, 분명히 CSSfont-feature-settings: 'palt';에서 하려고 했는데 무장시스템의 서브셋 글씨체 제조업체가 OpenType 기능을 삭제했다. 그나저나 Font Squire Webfont Generator를 비롯한 서브집합 웹 서비스에 대해 원래 글씨체 크기가 너무 커서 안 된다고 하는 것은 502 Bad Gateway이다.없는 것으로 몰리다.
글꼴 크기?그러고 보니 노트산스 CJK JP와 같은 그레브로 만든 Adobe Source Han Sans JP는 확실히 전자보다 사이즈가 작다.Reglar의 무게를 비교하면 전자는 약 16.4MB, 후자는 약 4.5MB이다.기대를 하면서 후자를 웹 서비스에 물렸지만 CJK Ideo 그래프가 완전히 삭제될 줄은 몰랐어요. 정말 속수무책이었어요.
자세히 조사하면 FoontForge, fonttools 등이 나온다.FoontForge에서 글꼴을 출력할 때 왠지 전혀 사용할 수 없는 글꼴이 나타납니다.fonttools가 이거예요.
  • https://github.com/fonttools/fonttools
  • 나중에 WOFF2 형식으로 만들고 싶은데 brotli 같은 프로그램 라이브러리가 있었으면 좋겠어요.Arch Linux1를 사용하고 있습니다.yaourt -S python-fonttools python-brotlipy 같은 것도 갈 수 있을 것 같아요.

    해설

    pip install fonttools brotli해봐.길기 때문에 필요한 곳만 빼낸다.
    pyftsubset -- OpenType font subsetter and optimizer
    
    ...
    
    Usage:
      pyftsubset font-file [glyph...] [--option=value]...
    
      At least one glyph or one of --gids, --gids-file, --glyphs, --glyphs-file,
      --text, --text-file, --unicodes, or --unicodes-file, must be specified.
    
    Arguments:
      font-file
        The input font file.
    
    ...
    
    Initial glyph set specification:
      These options populate the initial glyph set. Same option can appear
      multiple times, and the results are accummulated.
    
    ...
    
      --text=<text>
          Specify characters to include in the subset, as UTF-8 string.
      --text-file=<path>
          Like --text but reads from a file. Newline character are not added to
          the subset.
      --unicodes=<XXXX>[,<XXXX>...]
          Specify comma/whitespace-separated list of Unicode codepoints or
          ranges as hex numbers, optionally prefixed with 'U+', 'u', etc.
          For example, --unicodes=41-5a,61-7a adds ASCII letters, so does
          the more verbose --unicodes=U+0041-005A,U+0061-007A.
          The special strings '*' will choose all Unicode characters mapped
          by the font.
      --unicodes-file=<path>
          Like --unicodes, but reads from a file. Anything after a '#' on any
          line in the file is ignored as comments.
    
    ...
    
    Output options:
      --output-file=<path>
          The output font file. If not specified, the subsetted font
          will be saved in as font-file.subset.
      --flavor=<type>
          Specify flavor of output font file. May be 'woff' or 'woff2'.
          Note that WOFF2 requires the Brotli Python extension, available
          at https://github.com/google/brotli
    
    ...
    
      --layout-features[+|-]=<feature>[,<feature>...]
          Specify (=), add to (+=) or exclude from (-=) the comma-separated
          set of OpenType layout feature tags that will be preserved.
          Glyph variants used by the preserved features are added to the
          specified subset glyph set. By default, 'calt', 'ccmp', 'clig', 'curs',
          'kern', 'liga', 'locl', 'mark', 'mkmk', 'rclt', 'rlig' and all features
          required for script shaping are preserved. To see the full list, try
          '--layout-features=?'. Use '*' to keep all features.
          Multiple --layout-features options can be provided if necessary.
          Examples:
            --layout-features+=onum,pnum,ss01
                * Keep the default set of features and 'onum', 'pnum', 'ss01'.
            --layout-features-='mark','mkmk'
                * Keep the default set of features but drop 'mark' and 'mkmk'.
            --layout-features='kern'
                * Only keep the 'kern' feature, drop all others.
            --layout-features=''
                * Drop all features.
            --layout-features='*'
                * Keep all features.
            --layout-features+=aalt --layout-features-=vrt2
                * Keep default set of features plus 'aalt', but drop 'vrt2'.
    
    ...
    
    Example:
      Produce a subset containing the characters ' !"#$%' without performing
      size-reducing optimizations:
      $ pyftsubset font.ttf --unicodes="U+0020-0025" \
        --layout-features='*' --glyph-names --symbol-cmap --legacy-cmap \
        --notdef-glyph --notdef-outline --recommended-glyphs \
        --name-IDs='*' --name-legacy --name-languages='*'
    
    $ pyftsubset --help에'kern','liga'등 익숙한 글들이 배열되어 있다.palt'도 아마 이 근처에 있을 거예요.필요한 문자를 모은 텍스트 파일을 준비했기 때문에 --layout-features처럼 했습니다.CSS--text-file=chars.txt 같은 지정 방법도 쓸 수 있을 것 같은데요.
    $ ls -lh
    total 4.4M
    -rw-r--r-- 1 yuhr users 4.3M Jun 16  2015 SourceHanSansJP-Regular.otf
    -rw-r--r-- 1 yuhr users  58K Jan  2 21:19 chars.txt
    $ pyftsubset SourceHanSansJP-Regular.otf --text-file=chars.txt --layout-features='*' --flavor=woff2 --output-file=SourceHanSansJP-Regular.min.woff2
    $ ls -lh
    total 5.2M
    -rw-r--r-- 1 yuhr users 883K Jan  2 23:24 SourceHanSansJP-Regular.min.woff2
    -rw-r--r-- 1 yuhr users 4.3M Jun 16  2015 SourceHanSansJP-Regular.otf
    -rw-r--r-- 1 yuhr users  58K Jan  2 21:19 chars.txt
    
    5분의 1의 차이가 많지 않다.

    맞다, 유니버설 레인지는?



    이것이 바로

    이렇게어때요?예쁘네요!
    필자 

    좋은 웹페이지 즐겨찾기