Blender (jusqu'à 2.49)
Python : 
enregistrer une image rendue
dans un fichier
    Début   Index
précédentScript Mesh colors
script mélange couleurs et uv Suivant
1/ Enregistrer une image de la scène courante
1b/  Enregistrer une image, variation avec Space Handler (raccourci dans la fenêtre 3D)
2/ Enregistrer une image de chaque caméra de la scène courante
3/ Enregistrer une image des  caméras définies dans une liste et la frame voulue (ou sur une série de frame)

Sur la même thématique voir aussi Changer de caméra :
   Version <<Matrix>>
   Version simple
   Version simple bis : autoconnexion à la scène 
   Le GUI pour blender 2.27 et inférieur.
 

Enregistrer une image de la scène courante

Dans les nouveautés de l'API python 2.33, il manque un outil qui permettrait d'enregistre l'image qui vient d'être rendue. Voici un court script pour contourner le problème et récupérer l'image au format ".png".

télécharger le script
 

# --------------------------------
# Une astuce pour sauvegarder l'image rendu au format png
# --------------------------------
# Workaround to save rendered image to a png file
# (c) jm soler 2004 
# --------------------------------
import Blender
from Blender import Scene
sc=Scene.GetCurrent()
rc=sc.getRenderingContext()

# --------------------------------
# get and change the render directory name
# récupère et change le répertoire de rendu
# --------------------------------
MYDIR='/test/'
RENDERDIR=rc.getRenderPath()
rc.setRenderPath(RENDERDIR+MYDIR)

#------------------------------------
# curieusement il n'y a pas de fonction:
# getImageType mais de cette maniere
# on est sur que le format d'image sauvegardé
# est bien statique et non pas un format
# d'animation
# ----------
# Curiously there is no getImageType
# but like that you can be sure that 
# images are in a static type not in a
# movie one
#------------------------------------
IMAGETYPE=Blender.Scene.Render.PNG
rc.setImageType(IMAGETYPE)

#------------------------------------
# on cale l'animation sur une seule image
#------------------------------------
NEWFRAME=12
OLDEFRAME=rc.endFrame()
OLDSFRAME=rc.startFrame() 
rc.startFrame(NEWFRAME)
rc.endFrame(NEWFRAME) 

#------------------------------------
# on effectue le rendu
#------------------------------------
rc.renderAnim()

# --------------------------------
# Maintenant il y a un fichier "0012"
# dans le répertoire "/render/test/"
# mais sans extension qu'il faut
# ajouter presque à la main 
# ------
# now there is a new file "0012"
# in the "/render/test/" directeory
# but without extention
# so we have to rename the file .
# --------------------------------
try :
 import nt
 os=nt
except:
 import posix
 os=posix

FILENAME= "%04d"%NEWFRAME
FILENAME=FILENAME.replace(' ','0')
FILENAME=RENDERDIR+MYDIR+FILENAME

try:
  TRUE=os.stat(FILENAME)
  os.rename(FILENAME,FILENAME+'.png')
except:
  pass
#----------------------------------
# return to te original frame values
#----------------------------------
rc.endFrame(OLDEFRAME) 
rc.startFrame(OLDSFRAME)

#----------------------------------
# return to te original render dir
#----------------------------------
rc.setRenderPath(RENDERDIR)
 

1b/ Enregistrer une image de la scène courante, variation avec space Handler
télécharger le script

 
Le script doit être chargé une première fois dans la fenêtre texte . L'en-tête :
# SPACEHANDLER.VIEW3D.EVENT
le rend immédiatement visible dans le menu View/ Space Handler Scripts de la fenêtre 3D . Il suffit de le cocher pour le rendre disponible . Le raccourcii Maj-R (R pour render) l'active . Par défaut, l'image porte le nom dela frame courante .
# SPACEHANDLER.VIEW3D.EVENT
# --------------------------------
# Workaround to save render  ed image to a png file

# (c) jm soler 2004-2005
# --------------------------------
import Blender
from Blender import Scene
from Blender import Draw, Window

evt = Blender.event
sc=Scene.GetCurrent()
rc=sc.getRenderingContext()
if evt == Draw.RKEY and Window.GetKeyQualifiers() == 3:
  # --------------------------------
  # get and change the render directory name
  # récupère et change le répertoire de rendu
  # --------------------------------
  MYDIR='/test/'
  RENDERDIR=rc.getRenderPath()
  print 'render dir',RENDERDIR
  rc.setRenderPath(RENDERDIR+MYDIR)

  #------------------------------------
  # curieusement il n'y a pas de fonction:
  # getImageType mais de cette maniere
  # on est sur que le format d'image sauvegardé
  # est bien statique et non pas un format
  # d'animation
  # ----------
  # Curiously there is no getImageType
  # but like that you can be sure that 
  # images are in a static type not in a
  # movie one
  #------------------------------------
  IMAGETYPE=Blender.Scene.Render.PNG
  rc.setImageType(IMAGETYPE)
  print 'image type :',IMAGETYPE
  #------------------------------------
  # on cale l'animation sur une seule image
  # la frame courante
  #------------------------------------
  NEWFRAME=Blender.Get('curframe')
  OLDEFRAME=rc.endFrame()
  OLDSFRAME=rc.startFrame() 
  rc.startFrame(NEWFRAME)
  rc.endFrame(NEWFRAME) 

  #------------------------------------
  # on effectue le rendu
  #------------------------------------
  rc.renderAnim()

  # --------------------------------
  # Maintenant il y a un fichier "0012"
  # dans le répertoire "/render/test/"
  # mais sans extension qu'il faut
  # ajouter presque à la main 
  # ------
  # now there is a new file "0012"
  # in the "/render/test/" directeory
  # but without extention
  # so we have to rename the file .
  # --------------------------------
  try :
   import nt
   os=nt
  except:
   import posix
   os=posix

  FILENAME= "%04d"%NEWFRAME
  FILENAME=FILENAME.replace(' ','0')
  FILENAME=RENDERDIR+MYDIR+FILENAME

  try:
    TRUE=os.stat(FILENAME)
    os.rename(FILENAME,FILENAME+'.png')
  except:
    pass
  #----------------------------------
  # return to te original frame values
  #----------------------------------
  rc.endFrame(OLDEFRAME) 
  rc.startFrame(OLDSFRAME)

  #----------------------------------
  # return to te original render dir
  #----------------------------------
  rc.setRenderPath(RENDERDIR)

 

Enregistrer une image de chaque caméra de la scène courante
 
 

#!BPY

"""
Name: 'All Active Camera Render'
Blender: 233
Group: 'Wizards'
Tip: 'ACR script 0.1, Make a shot for each active camera of the current scene.'
"""

# --------------------------------
# Une astuce pour sauvegarder enregistrer une
# image du rendu de toutes les cameras de la scene
# au format 
# --------------------------------
# Workaround to render and save an image for each
# camera in the current scene at the current
# format 
# (c) jm soler 11/11/2004 
# --------------------------------
try :
 import nt
 os=nt
except:
 import posix
 os=posix
DEBUG=0

import Blender
from Blender import Scene
SC=Scene.GetCurrent()
RC=SC.getRenderingContext()
#IMAGETYPE=[Blender.Scene.Render.TARGA,'.tga']
#IMAGETYPE=[Blender.Scene.Render.RAWTGA,'.tga']
#IMAGETYPE=[Blender.Scene.Render.PNG,'.png']
#IMAGETYPE=[Blender.Scene.Render.BMP,'.bmp']
IMAGETYPE=[Blender.Scene.Render.JPEG,'.jpg']
 
 

NUM=1

def render_image(RC,IMAGETYPE,NUM,CAM_NAME):
    RENDERDIR=RC.getRenderPath()
    MYDIR=''
    RC.setRenderPath(RENDERDIR+MYDIR)
    RC.setImageType(IMAGETYPE[0])
    NEWFRAME=NUM
    OLDEFRAME=RC.endFrame()
    OLDSFRAME=RC.startFrame() 
    RC.startFrame(NEWFRAME)
    RC.endFrame(NEWFRAME) 
    RC.renderAnim()
    FILENAME= "%04d"%NEWFRAME
    FILENAME=FILENAME.replace(' ','0')
    FILENAME=RENDERDIR+FILENAME
    try:
      TRUE=os.stat(FILENAME)
      os.rename(FILENAME,FILENAME+CAM_NAME+IMAGETYPE[1])
    except:
      pass 
    RC.endFrame(OLDEFRAME) 
    RC.startFrame(OLDSFRAME)
    RC.setRenderPath(RENDERDIR)

ALL_CAMERA=[c for c in Blender.Object.Get() if c.getType()=='Camera']
if DEBUG : print ALL_CAMERA

ACT_CAMERA=SC.getCurrentCamera()
for THIS_CAM in ALL_CAMERA:
    SC.setCurrentCamera(THIS_CAM)
    CAM_NAME=THIS_CAM.getName()
    if DEBUG : print CAM_NAME
    render_image(RC,IMAGETYPE,NUM,CAM_NAME)
    NUM+=1

SC.setCurrentCamera(ACT_CAMERA)

 

Enregistrer une image des  caméras définies dans une liste et la frame voulue (ou sur une série de frame)
 
 

#!BPY

"""
Name: ' Cameras Render at Selected Frame''
Blender: 233
Group: 'Wizards'
Tip: 'CRSF script 0.1, Make a shot for each active camera found in the list at pointed 
frame.'
"""

# --------------------------------
# (c) jm soler 28/01/2006 : updated : 14/12/2006
# --------------------------------

try :
 import nt
 os=nt
except:
 import posix
 os=posix
DEBUG=0

import Blender
from Blender import Scene
SC=Scene.GetCurrent()
RC=SC.getRenderingContext()
#IMAGETYPE=[Blender.Scene.Render.TARGA,'.tga']
#IMAGETYPE=[Blender.Scene.Render.RAWTGA,'.tga']
#IMAGETYPE=[Blender.Scene.Render.PNG,'.png']
#IMAGETYPE=[Blender.Scene.Render.BMP,'.bmp']
IMAGETYPE=[Blender.Scene.Render.JPEG,'.jpg']

NUM=1

def render_image(RC,IMAGETYPE,NUM,CAM_NAME):
    RENDERDIR=RC.getRenderPath()
    MYDIR=''
    RC.setRenderPath(RENDERDIR+MYDIR)
    RC.setImageType(IMAGETYPE[0])
    NEWFRAME=NUM
    OLDEFRAME=RC.endFrame()
    OLDSFRAME=RC.startFrame() 
    RC.startFrame(NEWFRAME)
    RC.endFrame(NEWFRAME) 
    RC.renderAnim()
    FILENAME= "%04d"%NEWFRAME
    FILENAME=FILENAME.replace(' ','0')
    FILENAME=RENDERDIR+FILENAME
    try:
      TRUE=os.stat(FILENAME)
      os.rename(FILENAME,FILENAME+CAM_NAME+IMAGETYPE[1])
    except:
      pass 
    RC.endFrame(OLDEFRAME) 
    RC.startFrame(OLDSFRAME)
    RC.setRenderPath(RENDERDIR)

# -----------------------
# Indiquer les noms de camera et les numeros de fram
# -----------------------
CAMERA_DICT={'Camera':[8],
       'Camera.002':[2],
       'Camera.003':[4],
       'Camera.004':[5],
}

ACT_CAMERA=SC.getCurrentCamera()

for CAM_NAME in CAMERA_DICT.keys():
  try: 
    SC.setCurrentCamera(Blender.Object.Get(CAM_NAME))
    for fc in CAMERA_DICT[CAM_NAME]:
        Blender.Set('curframe',fc )
        NUM=fc
        if DEBUG : print CAM_NAME, 'frame :',fc
        render_image(RC,IMAGETYPE,NUM,CAM_NAME)

  except  :
        print CAM_NAME
 


 
précédentScript Mesh colors
 script mélange couleurs et uv Suivant
Vers le  Haut de page

Les questions concernant cette page  peuvent être posées sur  :
 news://news.zoo-logique.org/3D.Blender


 

 

Livre en français
Blender : apprenez, pratiquez, Créez, livre, Ed. Campus Press, coll. Starter Kit
Blender Starter Kit

Forum
FAQ
Lexique
Didacticiels
Compilations
Blender2KT
Débuter
Modelage
Blender python
Materiaux
Lumière
Animation
API python (eng)
Archives nzn
Statistiques
Doc flash Sculptris
Galerie Sculptris

mon site de démos sur youtube