/noto-emoji-docker

docomoのダサい絵文字を抹消する

Primary LanguageDockerfile

noto-emojiをビルドする

docomoのダサい絵文字を抹消することが目的。 絵文字を変更するだけだったら、後述のzFont 3を使えば解決するが、アプリ内で選択できるフォントでは空白の間隔がおかしくなったり、リンクを意味する下線が下に行き過ぎたりと、表示がおかしくなってしまう。それを解決するためにnoto-emojiのソースレベルで調整してビルドするという作戦をとる。

動作確認端末

Galaxy S22

Dockerインストール

起動しているPCがWindowsなら
https://docs.docker.jp/docker-for-windows/install.html

起動しているPCがUbuntuなら
https://docs.docker.com/engine/install/ubuntu/

Docker実行

ビルド環境を用意するのが面倒なので、Dockerで用意した。 以下を実行する。devcontainerを使っている人はそのままGUI操作で開いてよい。

docker image build -t noto-emoji .
docker run --name noto-emoji-container -it noto-emoji /bin/bash

ビルド準備

noto-emojiのリポジトリをCloneする。 今回は、Unicode 15.0の絵文字をビルドする。

git clone -b v2.038 https://github.com/googlefonts/noto-emoji.git
cd noto-emoji

絵文字以外のフォントやレイアウトを崩さないように以下のコマンドを実行する。

rm png/128/emoji_u002a* png/128/emoji_u0023* png/128/emoji_u003*
rm png/32/emoji_u002a* png/32/emoji_u0023* png/32/emoji_u003*
rm png/512/emoji_u002a* png/512/emoji_u0023* png/512/emoji_u003*
rm png/72/emoji_u002a* png/72/emoji_u0023* png/72/emoji_u003*
mv NotoColorEmoji.tmpl.ttx.tmpl NotoColorEmoji.tmpl.ttx.tmpl.bak
sed -e 's/".notdef" width="2550"/".notdef" width="680"/g' \
    -e 's/"nonmarkingreturn" width="2550"/"nonmarkingreturn" width="680"/g' \
    -e 's/"space" width="2550"/"space" width="680"/g' \
    -e 's/".notdef" height="2500"/".notdef" height="680"/g' \
    -e 's/"nonmarkingreturn" height="2500"/"nonmarkingreturn" height="680"/g' \
    -e 's/"space" height="2500"/"space" height="680"/g' \
    -e 's/underlinePosition value="-1244"/underlinePosition value="-300"/g' \
    NotoColorEmoji.tmpl.ttx.tmpl.bak > NotoColorEmoji.tmpl.ttx.tmpl

調整方法は以下のサイトを参考にした。

Galaxyスマホの絵文字が気に食わないのでGoogleの絵文字に差し替える

img

そして、ソースコードを一部修正する。
フォントの一部のファイルを削除したことで、ビルド前のチェック実装に引っかかってしまってビルドが通らない。チェックをすり抜けるように以下の実装を修正する。
check_emoji_sequences.pyの315行目あたり。

nano check_emoji_sequences.py
-  if not coverage_pass:
-    exit("Please fix the problems mentioned above or run: make BYPASS_SEQUENCE_CHECK='True'")
+  # if not coverage_pass:
+  #   exit("Please fix the problems mentioned above or run: make BYPASS_SEQUENCE_CHECK='True'")

ビルド実行

ビルドは公式のREADMEに従って実行する。

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
rm -rf build/ && time make -j 48

結構かかるので、待つ。

ビルドが成功したら、以下のように出る。

Dropped outline ('glyf', 'CFF ') and related tables.
Found images for 3687 characters in 'build/compressed_pngs/emoji_u*.png'.
Embedding images for 3687 glyphs for this strike.
Strike ppem set to 109.
Output font 'NotoColorEmoji.ttf' generated.

CBDT table synthesized: 10249565 bytes.
CBLC table synthesized: 14864 bytes.

Output font 'NotoColorEmoji_WindowsCompatible.ttf' generated.
rm build/emoji/emoji_ufe82b.png

real    8m40.454s
user    131m19.178s
sys     0m36.879s

NotoColorEmoji.ttfが今回ほしいフォントファイルになる。
別ターミナルで、以下を実行。

docker cp <コンテナID>:/noto-emoji/NotoColorEmoji.ttf NotoColorEmoji.ttf

Dockerからホスト側のPCにファイルを持ってくるときは以下のサイトを参考にする。

Dockerでホストとコンテナ間でのファイルコピー

imghttps://qiita.com/gologo13/items/7e4e404af80377b48fd5)

zFont 3での操作

ここからはAndroid側の操作となる。 別のブログのほうが詳しいので、ここを参考にする。

ドコモ絵文字を完全抹殺。システムフォント変更アプリ「zFont 3」の使い方

img

出来上がり確認

処置前

img

処置後

img