ckeditor
from io import BytesIO from django.core.files.storage import FileSystemStorage from django.core.files.uploadedfile import InMemoryUploadedFile from PIL import Image, ImageDraw, ImageFont class WatermarkStorage(FileSystemStorage): def save(self, name, content, max_length=None): # 处理逻辑 if 'image' in content.content_type: # 加水印 image = self.watermark_with_text(content, 'the5fire.com', 'red') content = self.convert_image_to_file(image, name) return super().save(name, content, max_length=max_length) def convert_image_to_file(self, image, name): temp = BytesIO() image.save(temp, format='PNG') file_size = temp.tell() return InMemoryUploadedFile(temp, None, name, 'image/png', file_size, None) def watermark_with_text(self, file_obj, text, color, fontfamily=None): image = Image.open(file_obj).convert('RGBA') draw = ImageDraw.Draw(image) width, height = image.size margin = 10 if fontfamily: font = ImageFont.truetype(fontfamily, int(height / 20)) else: font = None textWidth, textHeight = draw.textsize(text, font) x = (width - textWidth - margin) / 2 # 计算横轴位置 y = height - textHeight - margin # 计算纵轴位置 draw.text((x, y), text, color, font) return image