Blender (jusqu'à 2.49)
|
Python
:
enregistrer
une image rendue
dans
un fichier
|
|
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
|
Les questions concernant cette page
peuvent être posées sur :
news://news.zoo-logique.org/3D.Blender
|