사용자 정의 이미지 필터

Wagtail은 다양한 이미지 처리 기능을 제공합니다. 사용자 정의 이미지 처리 기능을 추가하려면, wagtail_hooks.py 파일에 register_image_operations 훅을 추가하세요.

이 예제에서 willow.image 는 Pillow 이미지 인스턴스입니다. 만약 다른 이미지 라이브러리를 사용하거나 여러 이미지 라이브러리를 지원하려면, 필터 코드를 그에 맞게 수정해야 합니다. 더 자세한 정보는 Willow 문서를 참조하세요.

from PIL import ImageFilter

from wagtail import hooks
from wagtail.images.image_operations import FilterOperation


class BlurOperation(FilterOperation):
    def construct(self, radius):
        self.radius = int(radius)

    def run(self, willow, image, env):
        willow.image = willow.image.filter(ImageFilter.GaussianBlur(radius=self.radius))
        return willow


@hooks.register("register_image_operations")
def register_image_operations():
    return [
        ("blur", BlurOperation),
    ]

템플릿에서는 다음과 같이 필터를 사용합니다:

{% load wagtailimages_tags %}

{% image page.photo width-400 blur-7 %}

만약 사용자 정의 이미지 필터가 Image 내의 필드, 예를 들어 초점을 정의하는 필드들에 의존한다면, 서브클래싱한 FilterOperation 에 해당 필드명들을 나열하는 vary_fields 속성을 추가하세요. 이렇게 하면 초점이 변경될 때마다 새로운 버전의 이미지가 생성됩니다:

class BlurOutsideFocusPointOperation(FilterOperation):
    vary_fields = (
        "focal_point_width",
        "focal_point_height",
        "focal_point_x",
        "focal_point_y",
    )
    # ...