source: lliurex-store/trunk/fuentes/lliurex-store-gui/ImageManager.py @ 3849

Last change on this file since 3849 was 3849, checked in by hectorgh, 3 years ago

added screenshots field

File size: 2.9 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3gi.require_version('PangoCairo', '1.0')
4
5import cairo
6
7from gi.repository import Gtk,GdkPixbuf,GLib,Gdk, PangoCairo, Pango
8
9
10
11def scale_image(image_file,x,y,aspect_ratio=True):
12
13        image=Gtk.Image.new_from_file(image_file)
14        pixbuf=image.get_pixbuf()
15        img_x=pixbuf.get_width()
16        img_y=pixbuf.get_height()
17        if aspect_ratio:
18               
19                ratio=min(x*1.0/img_x,y*1.0/img_y)
20        else:
21                ratio=1
22                img_x=x
23                img_y=y
24       
25        pixbuf=pixbuf.scale_simple(img_x*ratio,img_y*ratio,GdkPixbuf.InterpType.HYPER)
26        img=Gtk.Image.new_from_pixbuf(pixbuf)
27       
28        return img
29       
30#def scale_image
31
32def scale_pixbuf(pixbuf,x,y,aspect_ratio=True):
33       
34        img_x=pixbuf.get_width()
35        img_y=pixbuf.get_height()
36        if aspect_ratio:
37               
38                ratio=min(x*1.0/img_x,y*1.0/img_y)
39        else:
40                ratio=1
41                img_x=x
42                img_y=y
43       
44        pixbuf=pixbuf.scale_simple(img_x*ratio,img_y*ratio,GdkPixbuf.InterpType.BILINEAR)
45        return pixbuf
46       
47#def scale_pixbuf
48       
49
50def create_banner(icon_file,size_x,size_y,txt,frame=True,output_file=None):
51       
52        reduction_percentage=0.65
53        offset_x= (size_x - (size_x*reduction_percentage)) /2
54        offset_y= (size_y - (size_y*reduction_percentage)) /2
55       
56        if not frame:
57                reduction_percentage=1.0
58       
59        image=scale_image(icon_file,size_x*reduction_percentage,size_y*reduction_percentage,frame)
60        pixbuf=image.get_pixbuf()
61
62        surface=cairo.ImageSurface(cairo.FORMAT_ARGB32,size_x,size_y)
63        ctx=cairo.Context(surface)
64       
65       
66       
67        lg1 = cairo.LinearGradient(0.0,0.0, 0.0, size_y)
68        lg1.add_color_stop_rgba(0, 0/255.0, 95/255.0, 219/255.0, 1)
69        lg1.add_color_stop_rgba(1, 0/255.0, 56/255.0, 134/255.0, 1)
70        ctx.rectangle(0, 0, size_x, size_y)
71        ctx.set_source(lg1)
72        ctx.fill()
73       
74
75        '''
76        ctx.move_to(0,size_y)
77        ctx.line_to(size_x*0.7,0)
78        ctx.line_to(size_x,0)
79        ctx.line_to(size_x,size_y)
80        ctx.line_to(0,size_y)
81        ctx.set_source_rgba(   0/255.0, 56/255.0, 134/255.0, 1)
82        ctx.fill()
83        '''
84       
85        img_offset_x=offset_x
86        img_offset_y=offset_y
87       
88        if not frame:
89                img_offset_x=0
90                img_offset_y=0
91       
92       
93        label_space_percentage=1.5
94        if txt==None:
95                label_space_percentage=1
96       
97        Gdk.cairo_set_source_pixbuf(ctx,image.get_pixbuf(),img_offset_x,img_offset_y/label_space_percentage)
98        ctx.paint()
99       
100        if txt!=None:
101               
102                ctx.set_source_rgba( 0,0,0,0.7 )
103                ctx.rectangle(0, size_y-offset_y , size_x, offset_y)
104                ctx.fill()
105               
106               
107                pctx = PangoCairo.create_layout(ctx)
108                desc = Pango.font_description_from_string ("Roboto %s"%int(offset_y*0.5))
109                pctx.set_font_description(desc)
110                ctx.set_source_rgba(0.9,0.9,0.9,1)
111               
112                pctx.set_markup("%s"%txt)
113                text_x,text_y=pctx.get_pixel_size()
114                ctx.move_to(size_x/2 - text_x/2, size_y - offset_y )
115                PangoCairo.show_layout(ctx, pctx)
116       
117        px=Gdk.pixbuf_get_from_surface(surface,0,0,size_x,size_y)
118        img=Gtk.Image.new_from_pixbuf(px)
119       
120       
121        if output_file == None:
122                return [True,img]
123        else:
124                surface.write_to_png(output_file)
125                return [True,output_file]
126       
127       
128#def create_banner
129
130if __name__=="__main__":
131       
132        create_banner("/usr/share/icons/Antu/apps/48/mozilla-firefox.svg",200,200,"Firefox")
Note: See TracBrowser for help on using the repository browser.