diff --git a/taiga/base/utils/thumbnails.py b/taiga/base/utils/thumbnails.py index f5d23628..e6d6a4b0 100644 --- a/taiga/base/utils/thumbnails.py +++ b/taiga/base/utils/thumbnails.py @@ -33,15 +33,22 @@ from io import BytesIO # SVG thumbnail generator try: from cairosvg.surface import PNGSurface + from cairosvg.url import fetch import magic + def url_fetcher(url, resource_type): + if url.startswith("data:"): + return fetch(url, resource_type) + return b"" + + def svg_image_factory(fp, filename): mime_type = magic.from_buffer(fp.read(1024), mime=True) if mime_type != "image/svg+xml": raise TypeError fp.seek(0) - png_data = PNGSurface.convert(fp.read()) + png_data = PNGSurface.convert(fp.read(), url_fetcher=url_fetcher) return PngImageFile(BytesIO(png_data)) Image.register_mime("SVG", "image/svg+xml") @@ -50,11 +57,14 @@ try: except Exception: pass +Image.init() # PSD thumbnail generator def psd_image_factory(data, *args): - return PSDImage.from_stream(data).as_PIL() + try: + return PSDImage.from_stream(data).as_PIL() + except Exception: + raise TypeError -Image.init() Image.register_open("PSD", psd_image_factory)