Custom Filters¶
Filters are an easy way to transform images using a pipeline. Creating a new filter is very simple, as we’ll see.
The first step is creating a filter class that inherits from thumbor.filters.BaseFilter
and naming it Filter
:
from thumbor.filters import BaseFilter
class Filter(BaseFilter):
pass
The next step is actually implementing the filter. Let’s say we want to create
the quality(99)
filter, a filter that takes a number
parameter and
sets the image quality to that parameter.
Note
Yep, this filter already exists and is built-in, but it is simple enough that we can talk on how to do it. Let’s get on with it.
from thumbor.filters import BaseFilter
class Filter(BaseFilter):
@filter_method(BaseFilter.PositiveNumber)
async def quality(self, value):
self.context.request.quality = value
Let’s analyse it:
The
filter_method
decorator takes as parameters any number of types (more on types below) you want to have as arguments to your filter;The filter method should be named according to how you want it to be invoked by thumbor (a.k.a the URL part). In our example, our filter will be invoked with
quality(99)
;The filter method is just an async function that you can do whatever you need with the image.
And that’s it, we got our filter. In order to use it, we need to put it in our thumbor.conf
:
from thumbor.filters import BUILTIN_FILTERS
FILTERS = BUILTIN_FILTERS + [
'mylib.filters.quality',
]
Available Filter Argument Types¶
Each parameter type has a regular expression that matches arguments of the given type, as well as a python type.
For more details on each of the types, check BaseFilter class in thumbor’s codebase.
BaseFilter.PositiveNumber
;BaseFilter.PositiveNonZeroNumber
;BaseFilter.NegativeNumber
;BaseFilter.Number
;DecimalNumber
;Boolean
;String
.