LoginSignup
2
0

More than 1 year has passed since last update.

BlenderでISBNから書影の自動作成

Last updated at Posted at 2021-10-20

目的

3DCGソフトウェアのBlenderでは、Pythonを使っていろいろな処理を自動化できます。
ここでは、ISBNから書籍の書影画像を作成する方法を紹介します。

※ macOSのBlender2.93で確認しています。適宜直せばWindowsでも動くはずです。
※ 書影の元画像は、openBDから取得します。openBDに登録してある書籍が対象になります。

書影の元になるBlenderファイルの作成手順

blender_pip install -U requests openbd
  • 適当なJPEG画像を/tmp/book.jpgとしてコピーします(この画像は後で上書きされます)。
  • Blenderを起動します。
  • 起動後に立方体がなければ、Shift + Aメッシュ - 立方体で作成します。
  • 立方体の名前をbookに変えます。
  • Nでサイドバーを出します。bookを選択しアイテムタブの寸法のX、Y、Zを0.21, 0.025, 0.297にします(A4判のサイズ)。
  • bookのマテリアルを2つ作成し、2つ目のベースカラーを画像テクスチャにし、/tmp/book.jpgを指定します。
  • 編集モードで正面の面を選択し、2つ目のマテリアルに割り当て、オブジェクトモードに戻ります。
  • UV Editingウィンドウにし、右側でAを押し、左側でAS4 + EnterR-90 + Enterを押した後、Gで下図のように左の四角が重なるようにします。

uv.jpg

  • Scriptウィンドウにし、新規作成し、名前をbook_image.pyにし、下記をコピペします。
book_image.py
import sys

import bpy
import fire
import requests
from openbd import book_info


def book_image(isbn):
    bi = book_info(str(isbn))
    res = requests.get(bi.image)
    with open("/tmp/book.jpg", "wb") as fp:
        fp.write(res.content)
    bpy.data.images["book.jpg"].reload()
    bpy.context.scene.render.filepath = "book"
    bpy.ops.render.render(write_still=True)
    bpy.ops.wm.save_as_mainfile()


if __name__ == "__main__":
    sys.argv = sys.argv[:1] + sys.argv[(sys.argv + ["--"]).index("--") + 1 :]
    fire.Fire(book_image)

参考:BlenderでPythonを実行する方法

  • テキストメニューの登録をチェックします。登録すると起動時に実行できるようになります。
  • Layoutウィンドウにし、カメラとライトなどを調整し、レンダリングしたときに好みの書影になるようにします。
  • book_image.blendという名前で、Blenderを保存し終了します。

実行

書影にしたい13桁または10桁のISBNを調べてください(下記では例として 9784764905801 を使っています)。

調べたISBNを使って、下記のように実行します。

blender -b -y book_image.blend -- 9784764905801
  • -bは、バックグラウンド実行の指定です。
  • -yは、自動実行時に確認を省略させる指定です。
  • --以降が、book_image.pyの関数book_imageの引数になります。

(適宜モデリングすると)以下のようなbook.pngが作成されます。

book.png

以上

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0