見出し画像

【Pythonコード】テキストデータから高画質なヘッダー画像を作る/wordcloud

 noteやツイッターなどのサイトでは自分のアカウントに「ヘッダー画像」を設定することができます。

 ヘッダー画像は写真やイラストなものでも使えますが、今回はテキストファイルを使って「文字情報のみ」からオリジナルな高画質で最適サイズなヘッダー画像を生成する方法をご紹介したいと思います。

使用するのはPythonの「WordCloud」パッケージ

 今回使用するのはPythonのWordCloud(ワードクラウド)パッケージです。


 Pythonはこの様な追加パッケージをpipから簡単に導入できるので非常に便利です。

準備:pip

pip install wordcloud
pip install chardet
pip install tqdm

なお、pipによるパッケージのインストールを実行するにはPathを事前に通しておく必要があります

Pathの通し方については以下のページをご参照ください。

pathを通すのが面倒な方はとりあえずAnacondaを使えばよいと思います。


フォントの用意

 Pythonで日本語を使おうとするときに一番つまづきやすいのがフォントの問題です。なので今回はOSに入っているフォントではなく、フォントファイル(拡張子.ttf)をダウンロードしてきてそのまま使うことにしたいと思います。

 フォントは何で使ってもいいですが、今回はフリー日本語フォントの「押出Mゴシック」をダウンロードして使うことにします。

上記のサイトのページ下部分の「フォントをダウンロード」から.ttfファイルが入ったzipファイルをダウンロードできます。

画像1

テキストファイルの用意

 一番重要なテキストはコピペでも直接文章を書いてもどっちでも大丈夫です。

 noteのマガジンヘッダー画像を作る際などにはそのマガジンに含まれる記事のテキストをコピペして1つのテキストファイルにまとめると良いかもしれません。

 今回は例として青空文庫で公開されている「走れメロス」のテキストファイルを使用することにします。

画像2

テキストからヘッダー画像を生成するPythonコード

ではいよいよ実行です。

from tqdm import tqdm
from wordcloud import WordCloud
import chardet

# ## 設定箇所 ###########
# 使用する.txtファイル
filename="hashire_merosu.txt"

# フォントファイル指定(日本語フォント指定可 .pyと同じディレクトリに置く)
font_path = "Oshidashi-M-Gothic-TT.ttf" 

# 背景色
background_color = "white"

# 描写する単語数
max_words = 500

# 画像サイズ指定(1600×568はnote.comのヘッダー最適サイズ)
width = 1600
height = 568

# ######################
# テキストの読み込み
with open(filename, mode="rb") as f:
   encode=chardet.detect(f.read())['encoding']

with open(filename, mode="r", encoding=encode,errors="ignore") as f:
   word_text = f.read()
   
# カラーマップ
colormap_list=["viridis","summer","Spectral","gist_earth","rainbow",
              "gist_ncar","brg","Set2","winter","Accent","Set3",
              "Set2","seismic","cool"]

# ワードクラウド生成
for colormap in tqdm(colormap_list):
   wordcloud = WordCloud(background_color=background_color,
                         colormap=colormap,
                           font_path=font_path,
                           max_words=max_words,
                           width=width,height=height).generate(word_text)

   wordcloud.to_file("wordcloud_%s.png"%colormap)

コードの説明

# 使用する.txtファイル
filename="hashire_merosu.txt"

この部分で使用する「.txt」ファイルを指定しています。

# フォントファイル指定(日本語フォント指定可 .pyと同じディレクトリに置く)
font_path = "Oshidashi-M-Gothic-TT.ttf" 

ここでは先程ダウンロードしてきた「.ttf」ファイルを指定しています。なお.ttfファイルは.pyあるいは.ipynbファイルと同じディレクトリに置いています。

# 描写する単語数
max_words = 500

max_wordsは描写する単語数です。多すぎると小さい単語が潰れて見えなくなるので適度に調整する必要があります。

# 画像サイズ指定(1600×568はnote.comのヘッダー最適サイズ)
width = 1600
height = 568

最後に画像サイズの設定です。ここではnote.comのクリエイターヘッダー画像・マガジンヘッダー画像に最適なサイズに設定しています。

各サイトにおける最適なサイズについてはこの記事の下の方にまとめておきましたのでご参照ください。

# テキストの読み込み
with open(filename, mode="rb") as f:
   encode=chardet.detect(f.read())['encoding']

with open(filename, mode="r", encoding=encode,errors="ignore") as f:
   word_text = f.read()

あと特に弄る必要はありませんが、テキストファイルのエンコーディングの問題が起きないようにエンコーディングを自動検出する一工夫を入れています。

いざ実行!

画像4

Pythonコードを実行すると13個ほどの.pngファイルが実行ディレクトリ内に生成されます。


画像3

この中から好きなものを選んでヘッダー画像に設定することができます。

画像5

画像6

画像7

 なお生成されるファイルは毎回微妙に異なるので、思い通りのファイルが出来なかった場合は再生成するとよいでしょう。

 また画像の色についてはcolormapの部分で指定していますが、今回設定した13個以外にもカラーマップはあるのでコードを書き換えれば変更追加は可能です。

 カラーマップについては下記のページをご参照ください。

おわりに

 今回はPythonのWordCloudパッケージを用いて、テキストデータのみからオリジナルなヘッダー画像を生成する方法をご紹介しました。

 今回はテキストの取得の部分を手動で行っていますが、BeautifulSoup4を用いたスクレイピングなどを使えばその部分すら自動化することもできます。

こんな感じに

 Pythonを用いたスクレイピングや自動ツイートのテクニックについてはまた別の機会にご紹介したいと思います。

なのでマガジンのご登録ぜひよろしくおねがいしますm(_ _)m


最適なサイズ:note.com

記事見出し画像
1280 × 670 px

クリエイターヘッダー画像・マガジンヘッダー画像
1600 × 568 px

最適なサイズ:ツイッター

1500 × 500px


最適なサイズ:YouTube

2560 × 1440px




よろしければサポートお願いします。サポート? サポート……、サポート!よろしくおねがいします!?