More File Formats
More file formats for rendering And a general info about them.
This commit is contained in:
parent
431e985825
commit
db7662503d
1 changed files with 159 additions and 77 deletions
|
@ -476,77 +476,10 @@ def layer(win, call):
|
||||||
|
|
||||||
current_Y = current_Y + 50
|
current_Y = current_Y + 50
|
||||||
|
|
||||||
# I will give 4 formats to save the renders too. The user will have
|
|
||||||
# to select 1 of those 4.
|
|
||||||
|
|
||||||
# PNG: The good old PNG. Which is an open format and is widly used
|
|
||||||
# in GNU / Linux operating system. Also it has lossless compre-
|
|
||||||
# ssion and an alha channel to store transparent parts.
|
|
||||||
|
|
||||||
# JPEG: A standard JPEG image type. Widly used to store photos. It
|
|
||||||
# content aware compression. Which is lossy, but more effective
|
|
||||||
# then PNG. Tho JPEG lacks alpha channel.
|
|
||||||
|
|
||||||
# EXR: In comparison to PNG or JPEG EXR format stores way broader
|
|
||||||
# range of values for each channel. Not simply from black to
|
|
||||||
# white. But also values that can be less then black and more
|
|
||||||
# then white. Giving you a High Dynamic Range look. And a
|
|
||||||
# possibility to store data such as Z depth.
|
|
||||||
|
|
||||||
# HDR: Similar to EXR. But more industry standard. And has bit more
|
|
||||||
# effective compression.
|
|
||||||
|
|
||||||
# I will not add any video files since the algoryhm will require
|
|
||||||
# actuall frames to be stored as separate files. This will insure
|
|
||||||
# that ALL frames were rendered. And in case of crash the algorythm
|
|
||||||
# will pick up from a previous frame in a folder. With video is not
|
|
||||||
# only impossible. But in case of a crash with video all the previous
|
|
||||||
# frames will be lost.
|
|
||||||
|
|
||||||
formats = ["JPEG", "PNG", "EXR", "HDR"]
|
|
||||||
|
|
||||||
for num, f in enumerate(formats):
|
|
||||||
|
|
||||||
if f == win.renders[render]["image_format"]:
|
|
||||||
|
|
||||||
UI_color.set(layer, win, "progress_time")
|
|
||||||
UI_elements.roundrect(layer, win,
|
|
||||||
x+20+(80*num),
|
|
||||||
y+current_Y + win.scroll["render"],
|
|
||||||
70,
|
|
||||||
40,
|
|
||||||
10)
|
|
||||||
|
|
||||||
def do():
|
|
||||||
win.renders[render]["image_format"] = f
|
|
||||||
save_settings(win, render)
|
|
||||||
|
|
||||||
UI_elements.roundrect(layer, win,
|
|
||||||
x+20+(80*num),
|
|
||||||
y+current_Y + win.scroll["render"],
|
|
||||||
70,
|
|
||||||
40,
|
|
||||||
10,
|
|
||||||
button=do)
|
|
||||||
|
|
||||||
UI_color.set(layer, win, "text_normal")
|
|
||||||
layer.set_font_size(20)
|
|
||||||
layer.move_to(x+30+(80*num),
|
|
||||||
y+current_Y + win.scroll["render"]+30)
|
|
||||||
layer.show_text(f)
|
|
||||||
|
|
||||||
current_Y = current_Y + 50
|
|
||||||
|
|
||||||
# Now let's put the settings them selves.
|
# Now let's put the settings them selves.
|
||||||
# First thing is we need start and end frames. And we also need it
|
# First thing is we need start and end frames. And we also need it
|
||||||
# somehow readable for the user. I think a schedule logo would
|
# somehow readable for the user.
|
||||||
# go fine here.
|
|
||||||
|
|
||||||
UI_elements.image(layer, win,
|
|
||||||
"settings/themes/"+win.settings["Theme"]+"/icons/schedule.png",
|
|
||||||
x+5, y+current_Y+win.scroll["render"], 40, 40)
|
|
||||||
|
|
||||||
# And the stuff it self
|
|
||||||
|
|
||||||
# I will probably need this.
|
# I will probably need this.
|
||||||
def is_number(string):
|
def is_number(string):
|
||||||
|
@ -559,11 +492,12 @@ def layer(win, call):
|
||||||
# START FRAME
|
# START FRAME
|
||||||
|
|
||||||
UI_elements.text(layer, win, render+"start_frame",
|
UI_elements.text(layer, win, render+"start_frame",
|
||||||
x+60,
|
x+10,
|
||||||
y+current_Y+win.scroll["render"],
|
y+current_Y+win.scroll["render"],
|
||||||
200,
|
100,
|
||||||
40,
|
40,
|
||||||
set_text=str(win.renders[render]["start_frame"]))
|
set_text=str(win.renders[render]["start_frame"]),
|
||||||
|
tip=talk.text("rendering_start_frame"))
|
||||||
|
|
||||||
if win.text[render+"start_frame"]["text"] != str(win.renders[render]["start_frame"])\
|
if win.text[render+"start_frame"]["text"] != str(win.renders[render]["start_frame"])\
|
||||||
and is_number(win.text[render+"start_frame"]["text"]):
|
and is_number(win.text[render+"start_frame"]["text"]):
|
||||||
|
@ -573,7 +507,7 @@ def layer(win, call):
|
||||||
|
|
||||||
|
|
||||||
UI_elements.roundrect(layer, win,
|
UI_elements.roundrect(layer, win,
|
||||||
x+215,
|
x+70,
|
||||||
y+current_Y+win.scroll["render"],
|
y+current_Y+win.scroll["render"],
|
||||||
40,
|
40,
|
||||||
40,
|
40,
|
||||||
|
@ -582,13 +516,87 @@ def layer(win, call):
|
||||||
icon="ok",
|
icon="ok",
|
||||||
tip=talk.text("checked"))
|
tip=talk.text("checked"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# FILE FORMATS
|
||||||
|
|
||||||
|
# I will not add any video files since the algoryhm will require
|
||||||
|
# actuall frames to be stored as separate files. This will insure
|
||||||
|
# that ALL frames were rendered. And in case of crash the algorythm
|
||||||
|
# will pick up from a previous frame in a folder. With video is not
|
||||||
|
# only impossible. But in case of a crash with video all the previous
|
||||||
|
# frames will be lost.
|
||||||
|
|
||||||
|
# What I want to do is to ejucate the user on the Open Formats.
|
||||||
|
# You know using OGG video instead of MP4 and stuff like that.
|
||||||
|
# For images there are the same types of Open Formats. The point
|
||||||
|
# is that these formats could be made and played using entirelly
|
||||||
|
# free software.
|
||||||
|
|
||||||
|
# I will let selection of formats that are not in the list but I
|
||||||
|
# will mark them as non-recommended. I will do it like so.
|
||||||
|
|
||||||
|
# [ <start frame> ] [ PNG ] [ <png frame>
|
||||||
|
|
||||||
|
# V PNG ?
|
||||||
|
# V JPEG ?
|
||||||
|
# V EXR ?
|
||||||
|
# X HDR ?
|
||||||
|
|
||||||
|
# And so on and forth. You can see that HDR is marked with an X
|
||||||
|
# it will be a button linking to the :
|
||||||
|
linfo = "http://www.linfo.org/free_file_format.html"
|
||||||
|
# so the user could read a full document describing desisions
|
||||||
|
# about the formats.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
formats = {
|
||||||
|
"PNG" : [True, "Image PNG", "https://en.wikipedia.org/wiki/Portable_Network_Graphics"],
|
||||||
|
"JPEG": [True, "Image JPEG", "https://en.wikipedia.org/wiki/JPEG"],
|
||||||
|
"EXR" : [True, "Open EXR", "https://en.wikipedia.org/wiki/OpenEXR"],
|
||||||
|
"HDR" : [False,"Radiance HDR", "https://en.wikipedia.org/wiki/RGBE_image_format"],
|
||||||
|
"BMP" : [False,"Microsoft BMP", "https://en.wikipedia.org/wiki/BMP_file_format"],
|
||||||
|
"TGA" : [False,"Truevision TGA", "https://en.wikipedia.org/wiki/Truevision_TGA"],
|
||||||
|
"TIFF": [False,"Tiff", "https://en.wikipedia.org/wiki/Tagged_Image_File_Format"]
|
||||||
|
}
|
||||||
|
|
||||||
|
if "selecting_render_file_format" not in win.current:
|
||||||
|
win.current["selecting_render_file_format"] = False
|
||||||
|
|
||||||
|
def do():
|
||||||
|
win.current["selecting_render_file_format"] = not win.current["selecting_render_file_format"]
|
||||||
|
|
||||||
|
UI_elements.roundrect(layer, win,
|
||||||
|
x+120,
|
||||||
|
y+current_Y + win.scroll["render"],
|
||||||
|
235,
|
||||||
|
40,
|
||||||
|
10,
|
||||||
|
button=do,
|
||||||
|
tip=talk.text("rendering_file_format"))
|
||||||
|
|
||||||
|
currentformat = win.renders[render]["image_format"]
|
||||||
|
|
||||||
|
|
||||||
|
if not win.current["selecting_render_file_format"]:
|
||||||
|
UI_color.set(layer, win, "text_normal")
|
||||||
|
layer.set_font_size(20)
|
||||||
|
layer.move_to(win.current['w']/2-len(formats[currentformat][1])*6,
|
||||||
|
y+current_Y + win.scroll["render"]+30)
|
||||||
|
layer.show_text(formats[currentformat][1])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# END FRAME
|
# END FRAME
|
||||||
UI_elements.text(layer, win, render+"end_frame",
|
UI_elements.text(layer, win, render+"end_frame",
|
||||||
x+60+210,
|
x+365,
|
||||||
y+current_Y+win.scroll["render"],
|
y+current_Y+win.scroll["render"],
|
||||||
200,
|
100,
|
||||||
40,
|
40,
|
||||||
set_text=str(win.renders[render]["end_frame"]))
|
set_text=str(win.renders[render]["end_frame"]),
|
||||||
|
tip=talk.text("rendering_end_frame"))
|
||||||
|
|
||||||
if win.text[render+"end_frame"]["text"] != str(win.renders[render]["end_frame"])\
|
if win.text[render+"end_frame"]["text"] != str(win.renders[render]["end_frame"])\
|
||||||
and is_number(win.text[render+"end_frame"]["text"]):
|
and is_number(win.text[render+"end_frame"]["text"]):
|
||||||
|
@ -608,8 +616,82 @@ def layer(win, call):
|
||||||
|
|
||||||
|
|
||||||
current_Y = current_Y + 50
|
current_Y = current_Y + 50
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if win.current["selecting_render_file_format"]:
|
||||||
|
|
||||||
|
for num, f in enumerate(formats):
|
||||||
|
|
||||||
|
if f == win.renders[render]["image_format"]:
|
||||||
|
|
||||||
|
UI_color.set(layer, win, "progress_time")
|
||||||
|
UI_elements.roundrect(layer, win,
|
||||||
|
x+120,
|
||||||
|
y+current_Y + win.scroll["render"],
|
||||||
|
235,
|
||||||
|
40,
|
||||||
|
10)
|
||||||
|
|
||||||
|
|
||||||
|
def do():
|
||||||
|
win.renders[render]["image_format"] = f
|
||||||
|
save_settings(win, render)
|
||||||
|
win.current["selecting_render_file_format"] = False
|
||||||
|
|
||||||
|
UI_elements.roundrect(layer, win,
|
||||||
|
x+120,
|
||||||
|
y+current_Y + win.scroll["render"],
|
||||||
|
235,
|
||||||
|
40,
|
||||||
|
10,
|
||||||
|
button=do)
|
||||||
|
|
||||||
|
UI_color.set(layer, win, "text_normal")
|
||||||
|
layer.set_font_size(20)
|
||||||
|
layer.move_to(win.current['w']/2-len(formats[f][1])*6,
|
||||||
|
y+current_Y + win.scroll["render"]+30)
|
||||||
|
layer.show_text(formats[f][1])
|
||||||
|
|
||||||
|
# RECCOMENDATION
|
||||||
|
|
||||||
|
if formats[f][0]:
|
||||||
|
rec = talk.text("recommended_yes")
|
||||||
|
ic = "ok"
|
||||||
|
else:
|
||||||
|
rec = talk.text("recommended_not")
|
||||||
|
ic = "cancel"
|
||||||
|
|
||||||
|
def do():
|
||||||
|
os.system("xdg-open "+linfo)
|
||||||
|
|
||||||
|
UI_elements.roundrect(layer, win,
|
||||||
|
x+10,
|
||||||
|
y+current_Y + win.scroll["render"],
|
||||||
|
40,
|
||||||
|
40,
|
||||||
|
10,
|
||||||
|
button=do,
|
||||||
|
icon=ic,
|
||||||
|
tip=rec)
|
||||||
|
|
||||||
|
# WIKIPEDIA ABOUT THE FORMAT
|
||||||
|
|
||||||
|
def do():
|
||||||
|
os.system("xdg-open "+formats[f][-1])
|
||||||
|
|
||||||
|
UI_elements.roundrect(layer, win,
|
||||||
|
x+430,
|
||||||
|
y+current_Y + win.scroll["render"],
|
||||||
|
40,
|
||||||
|
40,
|
||||||
|
10,
|
||||||
|
button=do,
|
||||||
|
icon="question",
|
||||||
|
tip="Wikipedia")
|
||||||
|
|
||||||
|
current_Y = current_Y + 50
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
# And here comes the UI of when it's during RENDERING
|
# And here comes the UI of when it's during RENDERING
|
||||||
|
|
Loading…
Add table
Reference in a new issue