prelom/django/uploads/models.py

52 lines
1.6 KiB
Python

from django.db import models
from imagekit.processors import ResizeToFit
from imagekit.models import ProcessedImageField
from pdf2image import convert_from_path
from PIL import Image
class ImageUpload(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
file = ProcessedImageField(
upload_to='images',
processors=[ResizeToFit(width=1115, upscale=False)],
)
class PdfUpload(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
file = models.FileField(upload_to='pdfs')
def __str__(self):
return self.title
def save(self, *args, **kwargs):
super(PdfUpload, self).save(*args, **kwargs)
if getattr(self, '_file_changed', True):
self.generate_png()
def generate_png(self):
images = convert_from_path(self.file.path, dpi=150)
widths, heights = zip(*(i.size for i in images))
total_height = sum(heights)
max_width = max(widths)
new_image = Image.new('RGB', (max_width, total_height))
y_offset = 0
for image in images:
new_image.paste(image, (0, y_offset))
y_offset += image.size[1]
new_image.save(self.file.path + '.png')
class OtherUpload(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
file = models.FileField(upload_to='other')
extension = models.CharField(
max_length=10,
help_text='Human-readable file extension (e.g., epub, docx, etc)'
)