スポンサーリンク

BlenderでPythonから画像を読み込み、アスペクト比を調整する

Import Images as Planeを使えばする必要すらないが、Pythonコードからplaneにテクスチャを設定する場合。

import bpy

# @brief Planeオブジェクトのサイズをテクスチャ画像に合わせて調整
# @param [in,out] plane Planeオブジェクト
# @param [in] Image Textureノード
# @param [in] ratio 何倍のサイズにするか
# @return なし
def TextureFixSize(plane,imgnode,ratio):
    
    maxsize = max( imgnode.image.size[0] , imgnode.image.size[1] )
    plane.scale[0] = imgnode.image.size[0] / maxsize * ratio
    plane.scale[1] = imgnode.image.size[1] / maxsize * ratio 
    

# @brief テクスチャをplaneに設定する
# @param [in,out] plane Planeオブジェクト
# @param [in] filepath 画像データへのパス
# @note マテリアルが設定され、Image Textureノードが存在している必要がある
# @return なし
def TextureFromFile(plane,filepath):
    ####################
    ## 画像ファイルを読み込み
    pngdata = bpy.data.images.load(filepath = filepath)

    ####################
    ## planeオブジェクトのImage Textureノードを取得
    nodetree = plane.material_slots["Material.001"].material.node_tree
    imgnode = nodetree.nodes["Image Texture"]

    ####################
    ## Image Textureノードへ画像を設定
    imgnode.image = pngdata

    ####################
    ## 張り付けたPlaneオブジェクトのサイズを画像サイズと同じ縦横比に合わせる
    TextureFixSize(plane,imgnode,1)
    

act = bpy.context.active_object
TextureFromFile(act,'C:/test/lake-6627781_640.jpg')

実行例

実行前

実行後

解説

画像読み込み、設定

まず画像ファイルを読み込む

pngdata = bpy.data.images.load(filepath = filepath)

次にマテリアルからImage Textureノードを取得する

nodetree = plane.material_slots["Material.001"].material.node_tree
imgnode = nodetree.nodes["Image Texture"]

ノードに画像を設定

imgnode.image = pngdata

画像サイズの取得

Image TextureノードのImageオブジェクトにsizeがある。

https://docs.blender.org/api/current/bpy.types.ShaderNodeTexImage.html

1 件のコメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: