SVN maintenance.
[blender.git] / release / scripts / io / netrender / thumbnail.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 import sys, os
20 import subprocess
21
22 import bpy
23
24 def generate(filename, external=True):
25     if external:
26         process = subprocess.Popen([sys.argv[0], "-b", "-noaudio", "-P", __file__, "--", filename], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
27         while process.poll() is None:
28             process.stdout.read(1024) # empty buffer to be sure
29         process.stdout.read()
30         
31         return _thumbname(filename)
32     else:
33         return _internal(filename)
34
35 def _thumbname(filename):
36     root = os.path.splitext(filename)[0]
37     return root + ".jpg"
38
39 def _internal(filename):
40     imagename = os.path.split(filename)[1]
41     thumbname = _thumbname(filename)
42
43     if os.path.exists(thumbname):
44         return thumbname
45
46     if bpy:
47         scene = bpy.data.scenes[0] # FIXME, this is dodgy!
48         scene.render.file_format = "JPEG"
49         scene.render.file_quality = 90
50         
51         # remove existing image, if there's a leftover (otherwise open changes the name)
52         if imagename in bpy.data.images:
53             img = bpy.data.images[imagename]
54             bpy.data.images.remove(img)
55
56         bpy.ops.image.open(filepath=filename)
57         img = bpy.data.images[imagename]
58             
59         img.save_render(thumbname, scene=scene)
60         
61         img.user_clear()
62         bpy.data.images.remove(img)
63
64         try:
65             process = subprocess.Popen(["convert", thumbname, "-resize", "300x300", thumbname])
66             process.wait()
67             return thumbname
68         except Exception as exp:
69             print("Error while generating thumbnail")
70             print(exp)
71
72     return None
73
74 if __name__ == "__main__":
75     import bpy
76     try:
77         start = sys.argv.index("--") + 1
78     except ValueError:
79         start = 0
80     for filename in sys.argv[start:]:
81         generate(filename, external=False)