見出し画像

Python を使って note の見出し画像に文字を入れる

note の見出し画像に限った話ではないのだが、画像に文字を入れる。

こんな感じにできた。

文字が白すぎる。

最終的には、文字を少し透明にした。透けすぎかな?

英語のタイトルと日本語のタイトルで作ってみた。

英語タイトルのテスト

日本語タイトルのテスト

真ん中もやってみたが、やめた。

2024-07-13撮影
2024-07-13撮影


↓これが始まり。

「そうだ、見出し画像にタイトルを入れよう」と思ってしまった。


で、できた!

何ができるようになったかというと

1.画像にキャプションを描画する

画像をフレームに貼り付けて、その下にキャプションを表示する

画像ファイルは TIFF形式、サイズは主に、2560x1920px または 1920x2560px
最大、2560 x 2560 px、小さな画像は中央に配置される

前に書いた記事というかスクリプトでは、画像サイズは一種類のみで、横と縦を場合分けして処理したが、最終的には、フレームの中央に画像を配置するようにして場合分けをなくした。フレームサイズ2660x2660px より小さな画像なら貼り付け可能と思われる。
しかし、エラー処理はなし。

キャプションは、ファイル名と画像サイズに固定。
好きなキャプションを入れる良い方法が思いつかない。キャプションを考えることは自動化できない。
キャプションを入れる場所は、貼り付けた画像の直下。中央揃え。文字色は黒。

2.見出し画像にタイトルを描画する

タイトルを見出し画像に重ねて描く。
白文字、ドロップシャドウ。
位置は、左右中央揃え。画像の底辺に合わせて配置。
ファイル名の先頭に "t_" をつけて、本文画像と見出し画像を区別しているので、スクリプトも同様とした。先頭に"t_"がついたファイルを見出し画像として処理する。
見出し画像は、2560x1340px を想定している。
ドロップシャドウの外側に白味があるのが気になる。どこか間違っているのだろうか。

3.note 用のテキストファイルを作る

ノートのタイトルと本文、タグをテキストファイルに保存する。
自動的に新規に記事を作って、タイトルや本文に文字を記入できたら良いのだが、やってみてできなかったので、いまはこの方法でやっている。

4.Notes 画像にタイトルを埋め込む

素材画像を置いたフォルダーの上位フォルダーに、Notes 画像用のテンプレートを置く。
それにタイトルを埋め込む。
文字色を考えていなかった。文字が真っ黒だなあと思う。

スクリプトの振り返り

振り返りとか言っているが、コードが複雑怪奇なものになってしまったから説明を書くのが面倒なのだ。

本文用画像に文字を入れるときは、大きめのテキスト画像を作り、それに画像を貼り付けた。

一方、見出し画像にタイトルを貼り付けるには、画像にドロップシャドウ付きテキストを貼り付けた。背景がうっすらと見えるようテキストの不透明度を設定した。

ドロップシャドウ画像を作る
shadow_img = Image.new("RGBA", photo.size, (255, 255, 255, 0))
透明な背景を用意する。
文字を描画する。色は黒。不透明度opacity =176 とした。白文字に対して"6"だけオフセット。
d_shadow.text(img_offset, title, font=t_font, fill=(0, 0, 0, opacity), anchor='mb', align='center')
ガウスぼかしを掛ける。半径は"2"とした。
anchor、mは横方向middle、bは縦方向bottom。
shadow_img = shadow_img.filter(ImageFilter.GaussianBlur(radius=2))

ドロップシャドウ画像、ノイズ画像に重ねたもの

テキスト画像を作る
txt_img = Image.new("RGBA", photo.size, (255, 255, 255, 0))
文字を描画する。色は白。
d_txt.text(img_bottom, title, font=t_font, fill=(255, 255, 255, opacity), anchor='mb', align='center')

テキスト画像、ノイズ画像に重ねたもの

マスク画像を作る
mask_img = Image.new("RGBA", photo.size, (0, 0, 0, 0))
マスク用の文字を描画する。
d_mask.text(img_bottom, title, font=t_font, fill=(0, 0, 0, 255), anchor='mb', align='center')

マスク画像、ノイズ画像に重ねたもの

白文字にドロップシャドウ画像を重ねる
ドロップシャドウ画像の文字を除く部分を、白文字画像に重ねる。
out = Image.composite(txt_img, shadow_img, mask_img)

できあがった影付き文字、ノイズ画像に重ねたもの

上の合成画像を、見出し画像に重ねる
title_img = Image.alpha_composite(photo, out)

完成、見出し画像に重ねたもの

あとは JPEG で保存。

ワークフロー

画像をコンピューターに取り込む。
選別と書き出し(OM Workspace、イラつかせるやつだ)
深度合成(Affinity Photo2、対象画像があれば)
トリミングおよびリサイズ(Affinity Photo 2)
ノイズ除去(Topaz DeNoiseAI、古いバージョン)
画像を保存するフォルダーの名称は、年月日に続けて「自然観察」または「NatureWatch」とする。これを見て、記事のタイトルを決めている。
ここまでが素材の準備である。
スクリプトを実行
note にアップする画像やテキストができあがる。
note 用テキストをテキスト記事に貼り付ける(タイトルを含む)。
テキスト記事本文から、タイトルをタイトル欄に貼り付ける。
本文用画像を記事にドラッグアンドドロップ。
見出し用画像を、「画像をアップロード」メニューからアップロード。
記事の作成が完了
記事の左上の「閉じる」をクリック。
記事を表示して画像を確認。
問題がなかったら、公開。

画像記事の場合は、確認なしで公開。
なんでテキスト記事と画像記事とで挙動が違うのか。仕様に統一感がないと感じる。

t.koba

この記事が気に入ったらサポートをしてみませんか?