]> git.0d.be Git - panikweb.git/blob - panikweb/utils.py
add custom thumbnail backend to store .webp variants
[panikweb.git] / panikweb / utils.py
1 from datetime import datetime, timedelta
2
3 import sorl.thumbnail.base
4 from sorl.thumbnail import default
5 from sorl.thumbnail.images import ImageFile
6 from sorl.thumbnail.parsers import parse_geometry
7
8
9 def tofirstdayinisoweek(year, week):
10     # from http://stackoverflow.com/questions/5882405/get-date-from-iso-week-number-in-python
11     ret = datetime.strptime('%04d-%02d-1' % (year, week), '%Y-%W-%w')
12     if datetime(year, 1, 4).isoweekday() > 4:
13         ret -= timedelta(days=7)
14     return ret
15
16
17 class ThumbnailBackend(sorl.thumbnail.base.ThumbnailBackend):
18     def _create_alternative_resolutions(self, source_image, geometry_string, options, name):
19         super()._create_alternative_resolutions(source_image, geometry_string, options, name)
20         # create .webp alternative, to be served to appropriate browsers
21         ratio = default.engine.get_image_ratio(source_image, options)
22         geometry = parse_geometry(geometry_string, ratio)
23         options = options.copy()
24         options['format'] = 'WEBP'
25         image = default.engine.create(source_image, geometry, options)
26         thumbnail_name = '%(file_name)s.webp' % {'file_name': name}
27         thumbnail = ImageFile(thumbnail_name, default.storage)
28         default.engine.write(image, options, thumbnail)
29         size = default.engine.get_image_size(image)
30         thumbnail.set_size(size)