summaryrefslogtreecommitdiff
path: root/rapid/filmstrip.py
blob: 916cb397c8bc6bf8003562663685d4b821f0ab7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/python
# -*- coding: latin1 -*-

### Copyright (C) 2010-2012 Damon Lynch <damonlynch@gmail.com>

### This program is free software; you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation; either version 2 of the License, or
### (at your option) any later version.

### This program is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
### GNU General Public License for more details.

### You should have received a copy of the GNU General Public License
### along with this program; if not, write to the Free Software
### Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
### USA

"""
Adds a filmstrip to the left and right of a pixbuf
"""

import gtk


xpm_data = [
"12 10 27 1",
"   c #000000",
".  c #232323",
"+  c #7A7A7A",
"@  c #838383",
"#  c #8C8C8C",
"$  c #909090",
"%  c #8E8E8E",
"&  c #525252",
"*  c #6E6E6E",
"=  c #939393",
"-  c #A3A3A3",
";  c #ABABAB",
">  c #A8A8A8",
",  c #9B9B9B",
"'  c #727272",
")  c #A4A4A4",
"!  c #BBBBBB",
"~  c #C4C4C4",
"{  c #C1C1C1",
"]  c #AFAFAF",
"^  c #3E3E3E",
"/  c #A6A6A6",
"(  c #BEBEBE",
"_  c #C8C8C8",
":  c #070707",
"<  c #090909",
"[  c #0A0A0A",
"            ",
"            ",
"            ",
"    .+@#$%& ",
"    *@=-;>, ",
"    '%)!~{] ",
"    ^$/(_~% ",
"     :<[[[  ",
"            ",
"            "]


def add_filmstrip(pixbuf):
    """
    Adds a filmstrip to the left and right of a pixbuf
    
    Returns a pixbuf
    
    """    
    filmstrip = gtk.gdk.pixbuf_new_from_xpm_data(xpm_data)
    filmstrip_width = filmstrip.get_width()
    filmstrip_height = filmstrip.get_height()
    filmstrip_right = filmstrip.flip(True)


    original = pixbuf
    original_height = original.get_height()
    thumbnail_width = original.get_width() + filmstrip_width * 2
    thumbnail_right_col = original.get_width() + filmstrip_width

    thumbnail = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, thumbnail_width, original.get_height())

    #add filmstrips to left and right
    for i in range(original_height / filmstrip_height):
        filmstrip.copy_area(0, 0, filmstrip_width, filmstrip_height, thumbnail, 0, i * filmstrip_height)
        filmstrip_right.copy_area(0, 0, filmstrip_width, filmstrip_height, thumbnail, thumbnail_right_col, i * filmstrip_height)
        
    #now do the remainder, at the bottom
    remaining_height = original_height % filmstrip_height
    if remaining_height:
        filmstrip.copy_area(0, 0, filmstrip_width, remaining_height, thumbnail, 0, original_height-remaining_height)
        filmstrip_right.copy_area(0, 0, filmstrip_width, remaining_height, thumbnail, thumbnail_right_col, original_height-remaining_height)

    if original.get_has_alpha():
        thumbnail = thumbnail.add_alpha(False, 0,0,0)
    #copy in the original image
    original.copy_area(0, 0, original.get_width(), original_height, thumbnail, filmstrip_width, 0)
    
    return thumbnail

    
if __name__ == '__main__':
    import sys
    
    
    if (len(sys.argv) != 2):
        print 'Usage: ' + sys.argv[0] + ' path/to/photo/image'

    else:
        p = gtk.gdk.pixbuf_new_from_file(sys.argv[1])
        p2 = add_filmstrip(p)
        p2.save('testing.png', 'png')