LoginSignup
2
2

More than 1 year has passed since last update.

Blenderの画像とPythonあれこれ

Last updated at Posted at 2022-09-04

Blenderの画像とPythonあれこれ

PNG画像をJPEGで保存するとき

ファイルサイズを圧縮するために、PNGファイルをJPEGで保存すると、色合いが変化することがありました。
完全な解決方法かはわからないですが、下記のようにしたら改善しました。

  • レンダープロパティのカラーマネジメントのビュー変換をFlimicから標準に変える
変更前 変更後

Pythonの場合

bpy.context.scene.view_settings.view_transform = "Standard"  # 標準に設定
# 画像保存
bpy.context.scene.view_settings.view_transform = "Filmic"  # Flimicに戻す

品質などを指定して画像を保存

画像を保存するときに、ダイアログでフォーマットやカラーや品質を設定できます。
Pythonでこれを実現するとします。Imageオブジェクトのsave()メソッドには引数がなく、オブジェクトの属性にもこれらの項目はありません。これらを設定するには、下記のようにする必要があるようです。

stng = bpy.context.scene.render.image_settings
stng.file_format = フォーマット  # ex. "JPEG", "PNG"
stng.color_mode = カラー  # ex. "BW", "RGB", "RGBA"
stng.quality = 品質  # 0-100

img = bpy.data.images[対象画像]
img.save_render(パス, scene=bpy.context.scene)

color_modeの設定では、先にfile_formatを決定する必要があることに注意してください。
たとえば、file_format == "JPEG"のときに、color_mode"RGBA"にするとエラーになります。
なお、color_mode == "RGBA"のときにfile_format"JPEG"にすると、color_mode"RGB"に変わるだけでエラーにはなりません。

アルファがあるかどうかの判定

画像がアルファを持っているかどうかを直接表す属性はないようですが、下記のようにして判定できました。ただし、JPEGとPNGのいくつかの種類でのみ確認しています。

img = bpy.data.images[対象画像]
has_alpha = img.depth // (img.is_float * 3 + 1) // 8 % 2 == 0

調べた範囲では、img.depth // (img.is_float * 3 + 1) // 8は、1, 2, 3, 4の値を取り、それぞれ、「1色、1色+α、3色、3色+α」でした。

以上

2
2
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
2