author | Tero Marttila <terom@fixme.fi> |
Fri, 05 Jun 2009 21:47:45 +0300 | |
changeset 61 | fad360dd01da |
parent 57 | 8d06e0283b88 |
child 77 | 2a53c5ade434 |
permissions | -rw-r--r-- |
51
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
""" |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
Rendering images as thumbnails/previews. |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
""" |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
|
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
import PIL.Image |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
|
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
class RenderMachine (object) : |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
""" |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
RAWR! I'm the render machine! |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
|
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
TODO: use multithreaded rendering (PIL supports it) |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
""" |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
|
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
def __init__ (self, config) : |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
""" |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
Use the given Configuration object's settings for rendering |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
""" |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
|
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
self.config = config |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
|
57
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
21 |
def render_out (self, image, size, file) : |
51
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
""" |
57
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
23 |
Creates a thumbnail from the given Image of the given `size`, and saves it at `out`. |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
24 |
|
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
25 |
Returns the file for convenience |
51
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
""" |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
57
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
28 |
# load the PIL.Image |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
29 |
img = image.load_image() |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
30 |
|
51
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
# we need to create a copy, as .thumbnail mutates the Image |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
img_out = img.copy() |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
# then resample to given size |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
img_out.thumbnail(size, resample=True) |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
# and write out |
57
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
38 |
img_out.save(file.path) |
51
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
|
57
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
40 |
return file |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
41 |
|
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
42 |
def render_lazy (self, image, size, out) : |
51
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
""" |
57
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
44 |
Renders the given image with render_out if `out` does not yet exist or is older than image. |
51
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
""" |
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
|
57
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
47 |
# stat the output file |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
48 |
out_stat = out.stat(soft=True) |
51
0f39cb5e4b11
start writing new structure, with config, render, filesystem modules
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
|
57
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
50 |
# compare |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
51 |
if not out_stat or out_stat.st_mtime < image.load_stat().st_mtime : |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
52 |
# render anew |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
53 |
return self.render_out(image, size, file) |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
54 |
|
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
55 |
else : |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
56 |
# already rendered |
8d06e0283b88
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
57 |
return file |