Добавил preview_image в Album, чтобы снизить размеры cover image
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
from django.db import models
|
||||
from core.models import BaseModel
|
||||
|
||||
import os
|
||||
import uuid
|
||||
from io import BytesIO
|
||||
|
||||
from PIL import Image
|
||||
from django.db import models
|
||||
from core.models import BaseModel
|
||||
|
||||
|
||||
def album_cover_upload_to(instance, filename):
|
||||
@@ -25,7 +27,9 @@ def track_upload_to(instance, filename):
|
||||
|
||||
class Artist(BaseModel):
|
||||
name = models.CharField(max_length=200)
|
||||
cover_image = models.ImageField(upload_to=artist_cover_upload_to, null=True, blank=True)
|
||||
cover_image = models.ImageField(
|
||||
upload_to=artist_cover_upload_to, null=True, blank=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name}"
|
||||
@@ -37,10 +41,35 @@ class Album(BaseModel):
|
||||
cover_image = models.ImageField(
|
||||
upload_to=album_cover_upload_to, null=True, blank=True
|
||||
)
|
||||
preview_image = models.ImageField(null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.artist} - {self.name}"
|
||||
|
||||
def create_preview_image(self):
|
||||
# Placeholder for preview image creation logic
|
||||
img = Image.open(self.cover_image)
|
||||
|
||||
target_height = 256
|
||||
target_width = int((target_height / img.height) * img.width)
|
||||
img = img.resize((target_width, target_height), Image.LANCZOS)
|
||||
|
||||
buffer = BytesIO()
|
||||
img.save(buffer, format="JPEG")
|
||||
buffer.seek(0)
|
||||
|
||||
self.preview_image.save(
|
||||
os.path.join("album_previews", f"{uuid.uuid4()}.jpg"),
|
||||
buffer,
|
||||
save=False,
|
||||
)
|
||||
buffer.close()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.preview_image and self.cover_image:
|
||||
self.create_preview_image()
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Track(BaseModel):
|
||||
title = models.CharField(max_length=200)
|
||||
|
||||
Reference in New Issue
Block a user