ホームページ  >  記事  >  php教程  >  絵文字を使用して任意の漢字を形成します

絵文字を使用して任意の漢字を形成します

高洛峰
高洛峰オリジナル
2016-11-23 15:51:585229ブラウズ

絵文字表現を使用して漢字や簡単な絵を形成することは、WeChat や QQ で広く普及しているので、自分でも作ってみたいと思います。

例えば、下の写真:

絵文字を使用して任意の漢字を形成します

私が考えた実現解決策は次のとおりです。まず中国語の文字を白い背景に黒い文字の絵に変換し、次にグレースケール値に基づいてその絵を別の文字にマッピングし、端末で印刷します。

前者のテキストから画像への変換は、一般的な描画ライブラリ (Python の PIL ライブラリなど) を使用して実装するのが非常に簡単です。作業負荷は、目的の効果を達成するために実装プロセス中にゆっくりとレイアウトを調整するだけです。後者は単純です。これは単なるマッピング関係です。画像内のピクセルのグレー値を特定の文字にマッピングします。この実装では、黒の背景と白の文字を持つ画像には 2 つのマッピング関係しかありません。黒の文字は絵文字に対応します。

この部分の Python 実装コードは次のとおりです。

ascii_char = list('1234567890abcd ')  # 任意多个字符,灰度值的映射区间

def select_ascii_char(r, g, b):
    ''' 在灰度图像中,灰度值最高为255,代表白色; 最低为0,代表黑色 '''
    # 把RGB转为灰度值,并且返回该灰度值对应的字符标记
    # 'RGB-灰度值'转换公式如下
    gray = int((19595 * r + 38469 * g + 7472 * b) >> 16)
    # ascii_char中的一个字符所能表示的灰度值区间
    unit = 256.0 / len(ascii_char)
    return ascii_char[int(gray/unit)]

select_ascii_char は、ピクセルを特定の外字文字にマッピングすることを実現します。

この関数の実装では、 ascii_char の方がシンプルで、必要な文字は 2 文字だけです。つまり、1 つは任意の文字で、もう 1 つはスペースです。

したがって、ascii_char を [u'❤️ ', u' '] に置き換えます

画像を端末上で印刷できる文字に変換し、端末のディスプレイに表示します。スペースが限られているため、画像を縮小して調整する必要があります。

zh2emoji コードは、私の github にある対応するコードをダウンロードしてください。これをフォークして、必要なさらにカスタマイズされた機能を実現できます

表示

「フェンネル」という単語を書く方法は N 通りあります:

print image2print(word2image(u'茴'), u'❤️ ')
print image2print(word2image(u'茴'), u'W ')
print image2print(word2image(u'茴'), u'茴', width=40)

出力結果は次のとおりです:

絵文字を使用して任意の漢字を形成します

絵文字を使用して任意の漢字を形成します

絵文字を使用して任意の漢字を形成しますその他の出力:

絵文字を使用して任意の漢字を形成します

絵文字を使用して任意の漢字を形成しますExtension

based z h2emoji,self 便利な拡張機能を実装しました:demo_show_animation.py.

絵文字などを使用して端末上で文章を順番に出力できますたとえば、 python ./demo_show_animation.py を実行しようとすると、「いいね!」をクリックするだけで、テキストを表示するアニメーションがターミナル内で実行されます。表示されるテキストは、

と入力したものです。この時点までは継続できますが、何か面白い遊び方は考えられましたか? ぜひご参加ください。プログラミングは一種の楽しみであり、コードは作家が言葉を書くのと同じように、プログラマーが頭の中で考えたアイデアを実現するための媒体であり、習慣です。

将来的には端末内で絵文字で構成されたアニメーション(ブカガールのローディングアニメーションなど)を再生する予定です

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。