diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bb837013..570f83143 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,11 +8,12 @@ - Ability to create rich text custom fields in Epics, User Stories, Tasks and Isues. - Full text search now use simple as tokenizer so search with non-english text are allowed. - Duplicate project: allows creating a new project based on the structure of another (status, tags, colors, default values...) +- Add thumbnails for PSD files. +- Add thumbnails for SVG files (Cario lib is needed). - i18n: - Add japanese (ja) translation. - Add korean (ko) translation. - Add chinese simplified (zh-Hans) translation. -- Add thumbnails for PSD files. ### Misc - API: diff --git a/requirements.txt b/requirements.txt index 670e9acee..7ff142ab7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -34,3 +34,4 @@ python-dateutil==2.6.0 netaddr==0.7.18 serpy==0.1.1 psd-tools==1.4 +CairoSVG==2.0.1 diff --git a/taiga/base/utils/thumbnails.py b/taiga/base/utils/thumbnails.py index e28aff0c7..a7e87e54a 100644 --- a/taiga/base/utils/thumbnails.py +++ b/taiga/base/utils/thumbnails.py @@ -26,12 +26,28 @@ from easy_thumbnails.files import get_thumbnailer from easy_thumbnails.exceptions import InvalidImageFormatError from PIL import Image +from PIL.PngImagePlugin import PngImageFile +from io import BytesIO +# SVG thumbnail generator +try: + from cairosvg.surface import PNGSurface + + def svg_image_factory(data, *args): + png_data = PNGSurface.convert(data.read()) + return PngImageFile(BytesIO(png_data)) + + Image.register_mime("SVG", "image/svg+xml") + Image.register_extension("SVG", ".svg") + Image.register_open("SVG", svg_image_factory) +except Exception: + pass + +# PSD thumbnail generator def psd_image_factory(data, *args): return PSDImage.from_stream(data).as_PIL() - Image.init() Image.register_open("PSD", psd_image_factory)