SmileyChris / easy-thumbnails

Easy thumbnails for Django
http://easy-thumbnails.readthedocs.org/
BSD 3-Clause "New" or "Revised" License
1.39k stars 319 forks source link

Replace_alpha and Background options together. #494

Open Peter-Potts opened 6 years ago

Peter-Potts commented 6 years ago

Thanks very much for your work on this app.

I found I got an error when setting thumbnail aliases with both options 'replace_alpha' and 'background' colors, please see below:

Setting both replace_alpha and background thumbnail options could cause errors in the 'background' processor method. (My use case was 'replace_alpha' in THUMBNAIL_DEFAULT_OPTIONS , but only some of my aliases wanted background padding - other times keeping the original aspect ratio)

With both replace_alpha, and background, there were "multiple values for keyword argument 'replace_alpha'" at the call to colorspace (processors.py, line 318). It appeared that if replace_alpha occured in **kwargs, then there was an issue as that duplicated the named parameter in this function call.

>>> t = get_thumbnailer(mymodel.picture_field)
>>> t.get_thumbnail({'size':(50,50),'replace_alpha':'#FFF','background':'#FFF'})

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "~\venv\lib\site-packages\easy_thumbnails\files.py", line 517, in get_thumbnail
    silent_template_exception=silent_template_exception)
  File "~\venv\lib\site-packages\easy_thumbnails\files.py", line 391, in generate_thumbnail
    self.thumbnail_processors)
  File "~\venv\lib\site-packages\easy_thumbnails\engine.py", line 40, in process_image
    image = processor(image, **processor_options)
  File "~\venv\lib\site-packages\easy_thumbnails\processors.py", line 318, in background
    im = colorspace(im, replace_alpha=background, **kwargs)
TypeError: colorspace() got multiple values for keyword argument 'replace_alpha'

With this change, the alpha can be replaced with one colour, and then a different background padding color applied. (You could use line 318 -> kwargs['replace_alpha'] = background to have it only listen to the background parameter)