Приветствую.
Я использую
Django ImageKit для обработки/обрезки загружаемых фото. Возникла необходимость добавлять к фото ещё и надпись. ОК. Написал кастомный процессор:
# ./example/processors.py
from django.conf import settings
from PIL import Image, ImageDraw, ImageFont
_default_font = ImageFont.truetype(settings.TEXT_OVERLAY_FONT_REGULAR, 24)
def add_text_overlay(image, text, font=_default_font):
rgba_image = image.convert('RGBA')
text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
image_draw = ImageDraw.Draw(text_overlay)
text_size_x, text_size_y = image_draw.textsize(text, font=font)
text_xy = ((rgba_image.size[0] / 2) - (text_size_x / 2), (rgba_image.size[1] / 2) - (text_size_y / 2))
image_draw.text(text_xy, text, font=font, fill=(255, 255, 255, 255))
image_with_text_overlay = Image.alpha_composite(rgba_image, text_overlay)
return image_with_text_overlay
class TextOverlayProcessor(object):
def __init__(self, text='Lorem ipsum dolor sit amet'):
"""
:param text: The overlay text, string.
"""
self.text = text
def process(self, img):
return add_text_overlay(image=img, text=self.text)
Подскажите, пожалуйста, как передать значение из поля в этот кастомный процессор внутри модели? Что-то типа такого:
# ./example/models.py
from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToFill
from .processors import TextOverlayProcessor
class Example(models.Model):
description = models.CharField('Description', ...)
image = models.ImageField('Picture', default=None)
image_800x800 = ImageSpecField(
source='image',
processors=[
ResizeToFill(800, 800),
TextOverlayProcessor(text=self.description) # но self, конечно же, нет в модели
],
format='JPEG',
options={'quality': 100}
)
...
Буду рад толковым комментариям.
Спасибо.